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