1d21b3d34SFangrui Song // RUN: %clangxx_msan -O0 %s -o %t && %run %t >%t.out 2>&1 2d21b3d34SFangrui Song // RUN: %clangxx_msan -O1 %s -o %t && %run %t >%t.out 2>&1 3d21b3d34SFangrui Song // RUN: %clangxx_msan -O2 %s -o %t && %run %t >%t.out 2>&1 4d21b3d34SFangrui Song // RUN: %clangxx_msan -O3 %s -o %t && %run %t >%t.out 2>&1 5d21b3d34SFangrui Song 6d21b3d34SFangrui Song // Test that (no_sanitize_memory) functions DO NOT propagate shadow. 7d21b3d34SFangrui Song 8d21b3d34SFangrui Song #include <stdlib.h> 9d21b3d34SFangrui Song #include <stdio.h> 10d21b3d34SFangrui Song 11d21b3d34SFangrui Song __attribute__((noinline)) 12*51fab8f3SRichard Smith __attribute__((weak)) 13d21b3d34SFangrui Song __attribute__((no_sanitize_memory)) f(int x)14d21b3d34SFangrui Songint f(int x) { 15d21b3d34SFangrui Song return x; 16d21b3d34SFangrui Song } 17d21b3d34SFangrui Song main(void)18d21b3d34SFangrui Songint main(void) { 19d21b3d34SFangrui Song int x; 20d21b3d34SFangrui Song int * volatile p = &x; 21d21b3d34SFangrui Song int y = f(*p); 22d21b3d34SFangrui Song if (y) 23d21b3d34SFangrui Song exit(0); 24d21b3d34SFangrui Song return 0; 25d21b3d34SFangrui Song } 26