steakhal added a comment. void clang_analyzer_dumpi(int); void clang_analyzer_dumpf(float); void clang_analyzer_dumpip(int*); void clang_analyzer_dumpfp(float*); void SymbolCast_of_float_type_aux(int *p) { *p += 1; clang_analyzer_dumpi(*p); // (Previously): Unknown -> (Now): (float) (conj_$1{int, LC2, S790, #1}) clang_analyzer_dumpf(*p); // (Previously): Unknown -> (Now): (float) (conj_$1{int, LC2, S790, #1}) clang_analyzer_dumpip(p); // &Element{x1,1 S64b,float} clang_analyzer_dumpfp(p); // &Element{x1,1 S64b,float} } void SymbolCast_of_float_type() { extern float x1; extern double x2; extern long double x3; void (*f)() = SymbolCast_of_float_type_aux; clang_analyzer_dumpi(*(&x1 + 1)); // Unknown clang_analyzer_dumpf(*(&x1 + 1)); // Unknown clang_analyzer_dumpip(&x1 + 1); // &Element{x1,1 S64b,int} clang_analyzer_dumpfp(&x1 + 1); // &Element{x1,1 S64b,float} f(&x1 + 1); // f(&x2 + 1); // f(&x3 + 1); }
Only lines 8-9 have changed. But IMO, in a bad way. We should have just `(conj_$1{float, LC2, S790, #1})` there, because the object you read from that location is of type `float`. Reading an `int` and casting it to `float` means a different thing. Before the patch - saying `Unknown`, it was not accurate, but at least correct. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D95799/new/ https://reviews.llvm.org/D95799 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits