Home | History | Annotate | Download | only in msan
      1 // RUN: %clangxx_msan -O0 %s -o %t && %run %t >%t.out 2>&1
      2 // RUN: %clangxx_msan -O1 %s -o %t && %run %t >%t.out 2>&1
      3 // RUN: %clangxx_msan -O2 %s -o %t && %run %t >%t.out 2>&1
      4 // RUN: %clangxx_msan -O3 %s -o %t && %run %t >%t.out 2>&1
      5 
      6 // RUN: %clangxx_msan -O0 %s -o %t -DCHECK_IN_F && %run %t >%t.out 2>&1
      7 // RUN: %clangxx_msan -O1 %s -o %t -DCHECK_IN_F && %run %t >%t.out 2>&1
      8 // RUN: %clangxx_msan -O2 %s -o %t -DCHECK_IN_F && %run %t >%t.out 2>&1
      9 // RUN: %clangxx_msan -O3 %s -o %t -DCHECK_IN_F && %run %t >%t.out 2>&1
     10 
     11 // Test that (no_sanitize_memory) functions
     12 // * don't check shadow values (-DCHECK_IN_F)
     13 // * treat all values loaded from memory as fully initialized (-UCHECK_IN_F)
     14 
     15 #include <stdlib.h>
     16 #include <stdio.h>
     17 
     18 __attribute__((noinline))
     19 __attribute__((no_sanitize_memory))
     20 int f(void) {
     21   int x;
     22   int * volatile p = &x;
     23 #ifdef CHECK_IN_F
     24   if (*p)
     25     exit(0);
     26 #endif
     27   return *p;
     28 }
     29 
     30 int main(void) {
     31   if (f())
     32     exit(0);
     33   return 0;
     34 }
     35