1*d21b3d34SFangrui Song // RUN: %clangxx_msan -O0 %s -o %t && %run %t
2*d21b3d34SFangrui Song // RUN: %clangxx_msan -DPOSITIVE -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s
3*d21b3d34SFangrui Song // REQUIRES: x86_64-target-arch
4*d21b3d34SFangrui Song 
5*d21b3d34SFangrui Song #include <emmintrin.h>
6*d21b3d34SFangrui Song 
to_int(double v)7*d21b3d34SFangrui Song int to_int(double v) {
8*d21b3d34SFangrui Song   __m128d t = _mm_set_sd(v);
9*d21b3d34SFangrui Song   int x = _mm_cvtsd_si32(t);
10*d21b3d34SFangrui Song   return x;
11*d21b3d34SFangrui Song   // CHECK: WARNING: MemorySanitizer: use-of-uninitialized-value
12*d21b3d34SFangrui Song   // CHECK: #{{.*}} in to_int{{.*}}vector_cvt.cpp:[[@LINE-3]]
13*d21b3d34SFangrui Song }
14*d21b3d34SFangrui Song 
main()15*d21b3d34SFangrui Song int main() {
16*d21b3d34SFangrui Song #ifdef POSITIVE
17*d21b3d34SFangrui Song   double v;
18*d21b3d34SFangrui Song #else
19*d21b3d34SFangrui Song   double v = 1.1;
20*d21b3d34SFangrui Song #endif
21*d21b3d34SFangrui Song   double* volatile p = &v;
22*d21b3d34SFangrui Song   int x = to_int(*p);
23*d21b3d34SFangrui Song   return !x;
24*d21b3d34SFangrui Song }
25