Enzyme icon indicating copy to clipboard operation
Enzyme copied to clipboard

Could not deduce type of integer error

Open gaurav-arya opened this issue 1 year ago • 6 comments

Using the kalman library, with a somewhat minified version of https://github.com/mherb/kalman/blob/master/examples/Robot1/main.cpp:

// this MUST be first, otherwise there might be problems on windows
// see: https://stackoverflow.com/questions/6563810/m-pi-works-with-math-h-but-not-with-cmath-in-visual-studio/6563891#6563891
#define _USE_MATH_DEFINES
#include <cmath>

#define EIGEN_USE_BLAS

#include "SystemModel.hpp"

#include <kalman/ExtendedKalmanFilter.hpp>

#include <iostream>
#include <random>
#include <chrono>

#include <Eigen/Core>

extern double __enzyme_autodiff(void *, double);

using namespace KalmanExamples;

typedef float T;

// Some type shortcuts
typedef Robot1::State<T> State;
typedef Robot1::Control<T> Control;
typedef Robot1::SystemModel<T> SystemModel;

double simulate(double input) {
  State x;
  x.setZero();

  Control u;
  SystemModel sys;

  Kalman::ExtendedKalmanFilter<State> ekf;
  ekf.init(x);

  double ekfy_sum = 0.0;
  auto x_ekf = ekf.predict(sys, u);

  return 0.0; 
}

int main(int argc, char **argv) {
    double df_dx1 = __enzyme_autodiff((void *)simulate, 1.0);
    return 0;
}

The error is could not deduce type of integer %5 = getelementptr inbounds %"class.Kalman::LinearizedSystemModel", ptr %0, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0, i64 1, !dbg !20902 num:32 q:{[]:Pointer.

Error dump: https://gist.github.com/gaurav-arya/3009232d6b24844ec49de4b8e4942081

gaurav-arya avatar Sep 02 '23 18:09 gaurav-arya

@ZuseZ4 tells me this is innocuous (only ran into this after significant minimization)

gaurav-arya avatar Sep 02 '23 18:09 gaurav-arya

Here is a full application where we still run into the same error.


// this MUST be first, otherwise there might be problems on windows
// see: https://stackoverflow.com/questions/6563810/m-pi-works-with-math-h-but-not-with-cmath-in-visual-studio/6563891#6563891
#define _USE_MATH_DEFINES
#include <cmath>

#define EIGEN_USE_BLAS

#include "SystemModel.hpp"
#include "OrientationMeasurementModel.hpp"
#include "PositionMeasurementModel.hpp"

#include <kalman/ExtendedKalmanFilter.hpp>
#include <kalman/UnscentedKalmanFilter.hpp>

#include <iostream>
#include <random>
#include <chrono>

#include <Eigen/Core>
int enzyme_dup;
int enzyme_dupnoneed;
int enzyme_out;
int enzyme_const;

extern double __enzyme_autodiff(void *, double);

using namespace KalmanExamples;

typedef float T;

// Some type shortcuts
typedef Robot1::State<T> State;
typedef Robot1::Control<T> Control;
typedef Robot1::SystemModel<T> SystemModel;

typedef Robot1::PositionMeasurement<T> PositionMeasurement;
typedef Robot1::OrientationMeasurement<T> OrientationMeasurement;
typedef Robot1::PositionMeasurementModel<T> PositionModel;
typedef Robot1::OrientationMeasurementModel<T> OrientationModel;


double simulate(double input) {
  State x;
  x.setZero();

  Control u;
  SystemModel sys;

  PositionModel pm(-10, -10, 30, 75);
  OrientationModel om;

  Kalman::ExtendedKalmanFilter<State> predictor;
  Kalman::ExtendedKalmanFilter<State> ekf;

  predictor.init(x);
  ekf.init(x);

  T systemNoise = 0.1;
  T orientationNoise = 0.025;
  T distanceNoise = 0.25;

  double ekfy_sum = 0.0;
  const size_t N = 100;
  for (size_t i = 1; i <= N; i++) {
    u.v() = input;
    u.dtheta() = 1.0;

    x = sys.f(x, u);

    x.x() += systemNoise * 0.5;
    x.y() += systemNoise * 0.5;
    x.theta() += systemNoise * 0.5;

    auto x_pred = predictor.predict(sys, u);
    auto x_ekf = ekf.predict(sys, u);

    {
      OrientationMeasurement orientation = om.h(x);
      orientation.theta() = 0.1;

      orientation.theta() += orientationNoise * 0.5;

      x_ekf = ekf.update(om, orientation);
    }

    {
      PositionMeasurement position = pm.h(x);

      position.d1() += distanceNoise * 0.5;
      position.d2() += distanceNoise * 0.5;

      x_ekf = ekf.update(pm, position);
    }

    ekfy_sum += x_ekf.y();

    std::cout << x.x() << "," << x.y() << "," << x.theta() << "," << x_pred.x()
              << "," << x_pred.y() << "," << x_pred.theta() << "," << x_ekf.x()
              << "," << x_ekf.y() << "," << x_ekf.theta() << std::endl;
  }
  return ekfy_sum / (double)N;
}

int main(int argc, char **argv) {
    double fx1 = simulate(1.0);
    double fx2 = simulate(1.1);
    std::cout << "fx1: " << fx1 << ", fx2: " << fx2 << std::endl;

    double df_dx1 = __enzyme_autodiff((void *)simulate, 1.0);
    double df_dx2 = __enzyme_autodiff((void *)simulate, 1.1);
    printf("x = %f, f(x) = %f, f'(x) = %f\n", 1.0, fx1, df_dx1);
    printf("x = %f, f(x) = %f, f'(x) = %f", 1.1, fx2, df_dx2);

    return 0;
}

We can verify that the function does depend on the input and probably has a meaningful gradient by commenting out the Enzyme lines in main.

gaurav-arya avatar Sep 07 '23 21:09 gaurav-arya

This should now no longer result in an assertion, but nice a compile time error.

wsmoses avatar Sep 12 '23 16:09 wsmoses

Compile time error:

: && /home/gridsan/aryag/llvm-project/build/bin/clang++ -std=c++11 -Wall -pedantic -g --save-temps -O2 -DEIGEN_NO_DEBUG -fuse-ld=lld -Wl,-mllvm -Wl,-load=/home/gridsan/aryag/Enzyme/enzyme/build_debug/Enzyme/LLDEnzyme-16.so -Wl,--load-pass-plugin=/home/gridsan/aryag/Enzyme/enzyme/build_debug/Enzyme/LLDEnzyme-16.so CMakeFiles/example_robot1.dir/examples/Robot1/main_original.cpp.o -o example_robot1  /usr/lib/x86_64-linux-gnu/libopenblas.so && :
not handling more than 6 pointer lookups deep dt:{[-1]:Pointer, [0,-1]:Anything, [8,-1]:Pointer, [8,8,-1]:Anything, [8,16,-1]:Pointer, [8,16,8,-1]:Anything, [8,16,16,0]:Pointer, [8,16,16,8]:Pointer, [8,16,16,8,-1]:Anything, [8,16,16,16]:Anything, [8,16,16,17]:Anything, [8,16,16,18]:Anything, [8,16,16,19]:Anything, [8,16,16,20]:Anything, [8,16,16,21]:Anything, [8,16,16,22]:Anything, [8,16,16,23]:Anything, [8,16,16,24]:Pointer, [8,16,16,24,-1]:Pointer, [8,16,16,24,8,-1]:Anything, [8,16,16,32]:Anything, [8,16,16,33]:Anything, [8,16,16,34]:Anything, [8,16,16,35]:Anything, [8,16,16,36]:Anything, [8,16,16,37]:Anything, [8,16,16,38]:Anything, [8,16,16,39]:Anything} only(-1): 
not handling more than 6 pointer lookups deep dt:{[-1]:Pointer, [0,-1]:Anything, [8,-1]:Pointer, [8,8,-1]:Anything, [8,16,-1]:Pointer, [8,16,8,-1]:Anything, [8,16,16,0]:Pointer, [8,16,16,8]:Pointer, [8,16,16,8,-1]:Anything, [8,16,16,16]:Anything, [8,16,16,17]:Anything, [8,16,16,18]:Anything, [8,16,16,19]:Anything, [8,16,16,20]:Anything, [8,16,16,21]:Anything, [8,16,16,22]:Anything, [8,16,16,23]:Anything, [8,16,16,24]:Pointer, [8,16,16,24,-1]:Pointer, [8,16,16,24,8,-1]:Anything, [8,16,16,32]:Anything, [8,16,16,33]:Anything, [8,16,16,34]:Anything, [8,16,16,35]:Anything, [8,16,16,36]:Anything, [8,16,16,37]:Anything, [8,16,16,38]:Anything, [8,16,16,39]:Anything} only(-1): 
not handling more than 6 pointer lookups deep dt:{[-1]:Pointer, [0,-1]:Anything, [8,-1]:Pointer, [8,8,-1]:Anything, [8,16,-1]:Pointer, [8,16,8,-1]:Anything, [8,16,16,0]:Pointer, [8,16,16,8]:Pointer, [8,16,16,8,-1]:Anything, [8,16,16,16]:Anything, [8,16,16,17]:Anything, [8,16,16,18]:Anything, [8,16,16,19]:Anything, [8,16,16,20]:Anything, [8,16,16,21]:Anything, [8,16,16,22]:Anything, [8,16,16,23]:Anything, [8,16,16,24]:Pointer, [8,16,16,24,-1]:Pointer, [8,16,16,24,8,-1]:Anything, [8,16,16,32]:Anything, [8,16,16,33]:Anything, [8,16,16,34]:Anything, [8,16,16,35]:Anything, [8,16,16,36]:Anything, [8,16,16,37]:Anything, [8,16,16,38]:Anything, [8,16,16,39]:Anything} only(-1): 
not handling more than 6 pointer lookups deep dt:{[-1]:Pointer, [0,-1]:Anything, [8,-1]:Pointer, [8,8,-1]:Anything, [8,16,-1]:Pointer, [8,16,8,-1]:Anything, [8,16,16,0]:Pointer, [8,16,16,8]:Pointer, [8,16,16,8,-1]:Anything, [8,16,16,16]:Anything, [8,16,16,17]:Anything, [8,16,16,18]:Anything, [8,16,16,19]:Anything, [8,16,16,20]:Anything, [8,16,16,21]:Anything, [8,16,16,22]:Anything, [8,16,16,23]:Anything, [8,16,16,24]:Pointer, [8,16,16,24,-1]:Pointer, [8,16,16,24,8,-1]:Anything, [8,16,16,32]:Anything, [8,16,16,33]:Anything, [8,16,16,34]:Anything, [8,16,16,35]:Anything, [8,16,16,36]:Anything, [8,16,16,37]:Anything, [8,16,16,38]:Anything, [8,16,16,39]:Anything} only(-1): 
not handling more than 6 pointer lookups deep dt:{[-1]:Pointer, [0,-1]:Anything, [8,-1]:Pointer, [8,8,-1]:Anything, [8,16,-1]:Pointer, [8,16,8,-1]:Anything, [8,16,16,0]:Pointer, [8,16,16,8]:Pointer, [8,16,16,8,-1]:Anything, [8,16,16,16]:Anything, [8,16,16,17]:Anything, [8,16,16,18]:Anything, [8,16,16,19]:Anything, [8,16,16,20]:Anything, [8,16,16,21]:Anything, [8,16,16,22]:Anything, [8,16,16,23]:Anything, [8,16,16,24]:Pointer, [8,16,16,24,-1]:Pointer, [8,16,16,24,8,-1]:Anything, [8,16,16,32]:Anything, [8,16,16,33]:Anything, [8,16,16,34]:Anything, [8,16,16,35]:Anything, [8,16,16,36]:Anything, [8,16,16,37]:Anything, [8,16,16,38]:Anything, [8,16,16,39]:Anything} only(-1): 
not handling more than 6 pointer lookups deep dt:{[-1]:Pointer, [0,-1]:Anything, [8,-1]:Pointer, [8,8,-1]:Anything, [8,16,-1]:Pointer, [8,16,8,-1]:Anything, [8,16,16,0]:Pointer, [8,16,16,8]:Pointer, [8,16,16,8,-1]:Anything, [8,16,16,16]:Anything, [8,16,16,17]:Anything, [8,16,16,18]:Anything, [8,16,16,19]:Anything, [8,16,16,20]:Anything, [8,16,16,21]:Anything, [8,16,16,22]:Anything, [8,16,16,23]:Anything, [8,16,16,24]:Pointer, [8,16,16,24,-1]:Pointer, [8,16,16,24,8,-1]:Anything, [8,16,16,32]:Anything, [8,16,16,33]:Anything, [8,16,16,34]:Anything, [8,16,16,35]:Anything, [8,16,16,36]:Anything, [8,16,16,37]:Anything, [8,16,16,38]:Anything, [8,16,16,39]:Anything} only(-1): 
freeing without malloc ptr %0
freeing without malloc ptr %0
freeing without malloc ptr %0
freeing without malloc ptr %0
freeing without malloc ptr %0
freeing without malloc ptr %0
ld.lld: error: /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_algobase.h:922:11: in function preprocess__ZN14KalmanExamples6Robot111SystemModelIfN6Kalman12StandardBaseEE15updateJacobiansERKNS0_5StateIfEERKNS0_7ControlIfEE void (ptr, ptr, ptr): Enzyme: Cannot deduce type of memset   tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(36) %5, i8 0, i64 32, i1 false) #27, !dbg !104048
<analysis>
<4 x float> <float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 0.000000e+00>: {[-1]:Anything}, intvals: {}
float 1.000000e+00: {[-1]:Float@float}, intvals: {}
float 0.000000e+00: {[-1]:Anything}, intvals: {}
<4 x float> <float 1.000000e+00, float 1.000000e+00, float 0.000000e+00, float 0.000000e+00>: {[-1]:Anything}, intvals: {}
<2 x float> <float 0.000000e+00, float 1.000000e+00>: {[-1]:Anything}, intvals: {}
  %15 = getelementptr inbounds %"class.Kalman::LinearizedSystemModel", ptr %0, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0, i64 6, !dbg !104156: {[-1]:Pointer, [-1,0]:Float@float}, intvals: {}
  %16 = getelementptr inbounds %"class.Kalman::LinearizedSystemModel", ptr %0, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0, i64 4, !dbg !104165: {[-1]:Pointer, [-1,0]:Float@float}, intvals: {}
  %17 = load float, ptr %6, align 4, !dbg !104175, !tbaa !104075: {[-1]:Float@float}, intvals: {}
  %18 = load float, ptr %8, align 4, !dbg !104184, !tbaa !104075: {[-1]:Float@float}, intvals: {}
  %19 = fadd float %17, %18, !dbg !104185: {[-1]:Float@float}, intvals: {}
  %20 = tail call float @cosf(float noundef %19) #28, !dbg !104191: {[-1]:Float@float}, intvals: {}
  %21 = load float, ptr %2, align 4, !dbg !104194, !tbaa !104075: {[-1]:Float@float}, intvals: {}
  %22 = fmul float %20, %21, !dbg !104195: {[-1]:Float@float}, intvals: {}
  %5 = getelementptr inbounds %"class.Kalman::LinearizedSystemModel", ptr %0, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0, i64 1, !dbg !104048: {[-1]:Pointer}, intvals: {}
  %6 = getelementptr inbounds float, ptr %1, i64 2, !dbg !104105: {[-1]:Pointer, [-1,0]:Float@float}, intvals: {}
  %8 = getelementptr inbounds float, ptr %2, i64 1, !dbg !104133: {[-1]:Pointer, [-1,0]:Float@float}, intvals: {}
  %10 = fadd float %7, %9, !dbg !104135: {[-1]:Float@float}, intvals: {}
  %11 = tail call float @sinf(float noundef %10) #28, !dbg !104141: {[-1]:Float@float}, intvals: {}
  %12 = fneg float %11, !dbg !104142: {[-1]:Float@float}, intvals: {}
  %13 = load float, ptr %2, align 4, !dbg !104148, !tbaa !104075: {[-1]:Float@float}, intvals: {}
  %14 = fmul float %13, %12, !dbg !104149: {[-1]:Float@float}, intvals: {}
  %4 = getelementptr inbounds %"class.Kalman::LinearizedSystemModel", ptr %0, i64 0, i32 1, !dbg !103881: {[-1]:Pointer, [-1,0]:Float@float, [-1,16]:Float@float, [-1,24]:Float@float, [-1,28]:Float@float, [-1,32]:Float@float}, intvals: {}
  %9 = load float, ptr %8, align 4, !dbg !104134, !tbaa !104075: {[-1]:Float@float}, intvals: {}
ptr %0: {[-1]:Pointer, [-1,44]:Float@float, [-1,60]:Float@float, [-1,68]:Float@float, [-1,72]:Float@float, [-1,76]:Float@float, [-1,80]:Float@float, [-1,84]:Float@float, [-1,88]:Float@float, [-1,92]:Float@float, [-1,96]:Float@float, [-1,100]:Float@float, [-1,104]:Float@float, [-1,108]:Float@float, [-1,112]:Float@float}, intvals: {}
ptr %1: {[-1]:Pointer, [-1,8]:Float@float}, intvals: {}
ptr %2: {[-1]:Pointer, [-1,0]:Float@float, [-1,4]:Float@float}, intvals: {}
  %26 = getelementptr inbounds %"class.Kalman::LinearizedSystemModel", ptr %0, i64 0, i32 2, i32 0, i32 0, i32 0, i32 0, i64 7, !dbg !104443: {[-1]:Pointer, [-1,0]:Float@float, [-1,4]:Float@float}, intvals: {}
  %23 = getelementptr inbounds %"class.Kalman::LinearizedSystemModel", ptr %0, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0, i64 7, !dbg !104202: {[-1]:Pointer, [-1,0]:Float@float}, intvals: {}
  %24 = getelementptr inbounds %"class.Kalman::LinearizedSystemModel", ptr %0, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0, i64 8, !dbg !104210: {[-1]:Pointer, [-1,0]:Float@float, [-1,4]:Float@float, [-1,8]:Float@float, [-1,12]:Float@float}, intvals: {}
  %25 = getelementptr inbounds %"class.Kalman::LinearizedSystemModel", ptr %0, i64 0, i32 2, i32 0, i32 0, i32 0, i32 0, i64 3, !dbg !104389: {[-1]:Pointer, [-1,0]:Float@float, [-1,4]:Float@float, [-1,8]:Float@float, [-1,12]:Float@float}, intvals: {}
  %7 = load float, ptr %6, align 4, !dbg !104106, !tbaa !104075: {[-1]:Float@float}, intvals: {}
</analysis>



ld.lld: error: /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_algobase.h:922:11: in function preprocess__ZN14KalmanExamples6Robot111SystemModelIfN6Kalman12StandardBaseEE15updateJacobiansERKNS0_5StateIfEERKNS0_7ControlIfEE void (ptr, ptr, ptr): Enzyme: Cannot deduce type of memset   tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(36) %5, i8 0, i64 32, i1 false) #27, !dbg !104048
<analysis>
<4 x float> <float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 0.000000e+00>: {[-1]:Anything}, intvals: {}
float 1.000000e+00: {[-1]:Float@float}, intvals: {}
float 0.000000e+00: {[-1]:Anything}, intvals: {}
<4 x float> <float 1.000000e+00, float 1.000000e+00, float 0.000000e+00, float 0.000000e+00>: {[-1]:Anything}, intvals: {}
<2 x float> <float 0.000000e+00, float 1.000000e+00>: {[-1]:Anything}, intvals: {}
  %15 = getelementptr inbounds %"class.Kalman::LinearizedSystemModel", ptr %0, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0, i64 6, !dbg !104156: {[-1]:Pointer, [-1,0]:Float@float}, intvals: {}
  %16 = getelementptr inbounds %"class.Kalman::LinearizedSystemModel", ptr %0, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0, i64 4, !dbg !104165: {[-1]:Pointer, [-1,0]:Float@float}, intvals: {}
  %17 = load float, ptr %6, align 4, !dbg !104175, !tbaa !104075: {[-1]:Float@float}, intvals: {}
  %18 = load float, ptr %8, align 4, !dbg !104184, !tbaa !104075: {[-1]:Float@float}, intvals: {}
  %19 = fadd float %17, %18, !dbg !104185: {[-1]:Float@float}, intvals: {}
  %20 = tail call float @cosf(float noundef %19) #28, !dbg !104191: {[-1]:Float@float}, intvals: {}
  %21 = load float, ptr %2, align 4, !dbg !104194, !tbaa !104075: {[-1]:Float@float}, intvals: {}
  %22 = fmul float %20, %21, !dbg !104195: {[-1]:Float@float}, intvals: {}
  %5 = getelementptr inbounds %"class.Kalman::LinearizedSystemModel", ptr %0, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0, i64 1, !dbg !104048: {[-1]:Pointer}, intvals: {}
  %6 = getelementptr inbounds float, ptr %1, i64 2, !dbg !104105: {[-1]:Pointer, [-1,0]:Float@float}, intvals: {}
  %8 = getelementptr inbounds float, ptr %2, i64 1, !dbg !104133: {[-1]:Pointer, [-1,0]:Float@float}, intvals: {}
  %10 = fadd float %7, %9, !dbg !104135: {[-1]:Float@float}, intvals: {}
  %11 = tail call float @sinf(float noundef %10) #28, !dbg !104141: {[-1]:Float@float}, intvals: {}
  %12 = fneg float %11, !dbg !104142: {[-1]:Float@float}, intvals: {}
  %13 = load float, ptr %2, align 4, !dbg !104148, !tbaa !104075: {[-1]:Float@float}, intvals: {}
  %14 = fmul float %13, %12, !dbg !104149: {[-1]:Float@float}, intvals: {}
  %4 = getelementptr inbounds %"class.Kalman::LinearizedSystemModel", ptr %0, i64 0, i32 1, !dbg !103881: {[-1]:Pointer, [-1,0]:Float@float, [-1,16]:Float@float, [-1,24]:Float@float, [-1,28]:Float@float, [-1,32]:Float@float}, intvals: {}
  %9 = load float, ptr %8, align 4, !dbg !104134, !tbaa !104075: {[-1]:Float@float}, intvals: {}
ptr %0: {[-1]:Pointer, [-1,44]:Float@float, [-1,60]:Float@float, [-1,68]:Float@float, [-1,72]:Float@float, [-1,76]:Float@float, [-1,80]:Float@float, [-1,84]:Float@float, [-1,88]:Float@float, [-1,92]:Float@float, [-1,96]:Float@float, [-1,100]:Float@float, [-1,104]:Float@float, [-1,108]:Float@float, [-1,112]:Float@float}, intvals: {}
ptr %1: {[-1]:Pointer, [-1,8]:Float@float}, intvals: {}
ptr %2: {[-1]:Pointer, [-1,0]:Float@float, [-1,4]:Float@float}, intvals: {}
  %26 = getelementptr inbounds %"class.Kalman::LinearizedSystemModel", ptr %0, i64 0, i32 2, i32 0, i32 0, i32 0, i32 0, i64 7, !dbg !104443: {[-1]:Pointer, [-1,0]:Float@float, [-1,4]:Float@float}, intvals: {}
  %23 = getelementptr inbounds %"class.Kalman::LinearizedSystemModel", ptr %0, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0, i64 7, !dbg !104202: {[-1]:Pointer, [-1,0]:Float@float}, intvals: {}
  %24 = getelementptr inbounds %"class.Kalman::LinearizedSystemModel", ptr %0, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0, i64 8, !dbg !104210: {[-1]:Pointer, [-1,0]:Float@float, [-1,4]:Float@float, [-1,8]:Float@float, [-1,12]:Float@float}, intvals: {}
  %25 = getelementptr inbounds %"class.Kalman::LinearizedSystemModel", ptr %0, i64 0, i32 2, i32 0, i32 0, i32 0, i32 0, i64 3, !dbg !104389: {[-1]:Pointer, [-1,0]:Float@float, [-1,4]:Float@float, [-1,8]:Float@float, [-1,12]:Float@float}, intvals: {}
  %7 = load float, ptr %6, align 4, !dbg !104106, !tbaa !104075: {[-1]:Float@float}, intvals: {}
</analysis>


not handling more than 6 pointer lookups deep dt:{[-1]:Pointer, [0,-1]:Anything, [8,-1]:Pointer, [8,8,-1]:Anything, [8,16,-1]:Pointer, [8,16,8,-1]:Anything, [8,16,16,0]:Pointer, [8,16,16,8]:Pointer, [8,16,16,8,-1]:Anything, [8,16,16,16]:Anything, [8,16,16,17]:Anything, [8,16,16,18]:Anything, [8,16,16,19]:Anything, [8,16,16,20]:Anything, [8,16,16,21]:Anything, [8,16,16,22]:Anything, [8,16,16,23]:Anything, [8,16,16,24]:Pointer, [8,16,16,24,-1]:Pointer, [8,16,16,24,8,-1]:Anything, [8,16,16,32]:Anything, [8,16,16,33]:Anything, [8,16,16,34]:Anything, [8,16,16,35]:Anything, [8,16,16,36]:Anything, [8,16,16,37]:Anything, [8,16,16,38]:Anything, [8,16,16,39]:Anything} only(-1): 
not handling more than 6 pointer lookups deep dt:{[-1]:Pointer, [0,-1]:Anything, [8,-1]:Pointer, [8,8,-1]:Anything, [8,16,-1]:Pointer, [8,16,8,-1]:Anything, [8,16,16,0]:Pointer, [8,16,16,8]:Pointer, [8,16,16,8,-1]:Anything, [8,16,16,16]:Anything, [8,16,16,17]:Anything, [8,16,16,18]:Anything, [8,16,16,19]:Anything, [8,16,16,20]:Anything, [8,16,16,21]:Anything, [8,16,16,22]:Anything, [8,16,16,23]:Anything, [8,16,16,24]:Pointer, [8,16,16,24,-1]:Pointer, [8,16,16,24,8,-1]:Anything, [8,16,16,32]:Anything, [8,16,16,33]:Anything, [8,16,16,34]:Anything, [8,16,16,35]:Anything, [8,16,16,36]:Anything, [8,16,16,37]:Anything, [8,16,16,38]:Anything, [8,16,16,39]:Anything} only(-1): 
not handling more than 6 pointer lookups deep dt:{[-1]:Pointer, [0,-1]:Anything, [8,-1]:Pointer, [8,8,-1]:Anything, [8,16,-1]:Pointer, [8,16,8,-1]:Anything, [8,16,16,0]:Pointer, [8,16,16,8]:Pointer, [8,16,16,8,-1]:Anything, [8,16,16,16]:Anything, [8,16,16,17]:Anything, [8,16,16,18]:Anything, [8,16,16,19]:Anything, [8,16,16,20]:Anything, [8,16,16,21]:Anything, [8,16,16,22]:Anything, [8,16,16,23]:Anything, [8,16,16,24]:Pointer, [8,16,16,24,-1]:Pointer, [8,16,16,24,8,-1]:Anything, [8,16,16,32]:Anything, [8,16,16,33]:Anything, [8,16,16,34]:Anything, [8,16,16,35]:Anything, [8,16,16,36]:Anything, [8,16,16,37]:Anything, [8,16,16,38]:Anything, [8,16,16,39]:Anything} only(-1): 
clang-16: error: linker command failed with exit code 1 (use -v to see invocation)

gaurav-arya avatar Sep 23 '23 17:09 gaurav-arya

@wsmoses good old type of memset. So it's a cross-language issue now, is there a clear way on how to make TA stronger? Presumably just look at the TA printing to see where we loose information?

ZuseZ4 avatar Sep 23 '23 18:09 ZuseZ4

Will keep open to fix, but I assume you can work around this for now with loose type analysis, yes?

wsmoses avatar Sep 24 '23 04:09 wsmoses