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