Home | History | Annotate | Download | only in lit_tests
      1 // RUN: %clangxx_msan -m64 -O0 %s -o %t && %t >%t.out 2>&1
      2 // RUN: %clangxx_msan -m64 -O1 %s -o %t && not %t >%t.out 2>&1
      3 // RUN: FileCheck %s < %t.out
      4 // RUN: %clangxx_msan -m64 -O2 %s -o %t && not %t >%t.out 2>&1
      5 // RUN: FileCheck %s < %t.out
      6 // RUN: %clangxx_msan -m64 -O3 %s -o %t && not %t >%t.out 2>&1
      7 // RUN: FileCheck %s < %t.out
      8 
      9 // Test that (no_sanitize_memory) functions propagate shadow.
     10 
     11 // Note that at -O0 there is no report, because 'x' in 'f' is spilled to the
     12 // stack, and then loaded back as a fully initialiazed value (due to
     13 // no_sanitize_memory attribute).
     14 
     15 #include <stdlib.h>
     16 #include <stdio.h>
     17 
     18 __attribute__((noinline))
     19 __attribute__((no_sanitize_memory))
     20 int f(int x) {
     21   return x;
     22 }
     23 
     24 int main(void) {
     25   int x;
     26   int * volatile p = &x;
     27   int y = f(*p);
     28   // CHECK: WARNING: Use of uninitialized value
     29   // CHECK: {{#0 0x.* in main .*no_sanitize_memory_prop.cc:}}[[@LINE+1]]
     30   if (y)
     31     exit(0);
     32   return 0;
     33 }
     34