1*aa454ddaSBalazs Benics // RUN: %clang_analyze_cc1 -triple x86_64-unknown-unknown -verify %s \ 2*aa454ddaSBalazs Benics // RUN: -analyzer-checker=core,debug.ExprInspection 3*aa454ddaSBalazs Benics 4*aa454ddaSBalazs Benics template <typename T> void clang_analyzer_dump(T); 5*aa454ddaSBalazs Benics _castf32_u32(float __A)6*aa454ddaSBalazs Benics__attribute__((always_inline)) static inline constexpr unsigned int _castf32_u32(float __A) { 7*aa454ddaSBalazs Benics return __builtin_bit_cast(unsigned int, __A); // no-warning 8*aa454ddaSBalazs Benics } 9*aa454ddaSBalazs Benics test(int i)10*aa454ddaSBalazs Benicsvoid test(int i) { 11*aa454ddaSBalazs Benics _castf32_u32(42); 12*aa454ddaSBalazs Benics 13*aa454ddaSBalazs Benics float f = 42; 14*aa454ddaSBalazs Benics 15*aa454ddaSBalazs Benics // Loading from a floating point value results in unknown, 16*aa454ddaSBalazs Benics // which later materializes as a conjured value. 17*aa454ddaSBalazs Benics auto g = __builtin_bit_cast(unsigned int, f); 18*aa454ddaSBalazs Benics clang_analyzer_dump(g); 19*aa454ddaSBalazs Benics // expected-warning-re@-1 {{{{^conj_\$[0-9]+{unsigned int,}}}} 20*aa454ddaSBalazs Benics 21*aa454ddaSBalazs Benics auto g2 = __builtin_bit_cast(unsigned int, 42.0f); 22*aa454ddaSBalazs Benics clang_analyzer_dump(g2); 23*aa454ddaSBalazs Benics // expected-warning-re@-1 {{{{^conj_\$[0-9]+{unsigned int,}}}} 24*aa454ddaSBalazs Benics 25*aa454ddaSBalazs Benics auto g3 = __builtin_bit_cast(unsigned int, i); 26*aa454ddaSBalazs Benics clang_analyzer_dump(g3); 27*aa454ddaSBalazs Benics // expected-warning-re@-1 {{{{^reg_\$[0-9]+<int i>}}}} 28*aa454ddaSBalazs Benics 29*aa454ddaSBalazs Benics auto g4 = __builtin_bit_cast(unsigned long, &i); 30*aa454ddaSBalazs Benics clang_analyzer_dump(g4); 31*aa454ddaSBalazs Benics // expected-warning@-1 {{&i [as 64 bit integer]}} 32*aa454ddaSBalazs Benics } 33