115805c03SVitaly Buka // RUN: %clangxx_msan -fno-sanitize-memory-param-retval -fsanitize-memory-track-origins=2 -O3 %s -o %t && \ 2*643a2080SHarini0924 // RUN: env MSAN_OPTIONS=store_context_size=1 not %run %t 2>&1 | FileCheck %s 3d21b3d34SFangrui Song 4d21b3d34SFangrui Song // Test that stack trace for the intermediate store is not empty. 5d21b3d34SFangrui Song 6d21b3d34SFangrui Song // CHECK: MemorySanitizer: use-of-uninitialized-value 7d21b3d34SFangrui Song // CHECK: #0 {{.*}} in main 8d21b3d34SFangrui Song 9d21b3d34SFangrui Song // CHECK: Uninitialized value was stored to memory at 10d21b3d34SFangrui Song // CHECK: #0 {{.*}} in fn_g 11d21b3d34SFangrui Song // CHECK-NOT: #1 12d21b3d34SFangrui Song 13057cabd9SKevin Athey // CHECK: Uninitialized value was created by an allocation of 'z' in the stack frame 14d21b3d34SFangrui Song // CHECK: #0 {{.*}} in main 15d21b3d34SFangrui Song 16d21b3d34SFangrui Song #include <stdio.h> 17d21b3d34SFangrui Song 18d21b3d34SFangrui Song volatile int x; 19d21b3d34SFangrui Song 20d21b3d34SFangrui Song __attribute__((noinline)) 21d21b3d34SFangrui Song void fn_g(int a) { 22d21b3d34SFangrui Song x = a; 23d21b3d34SFangrui Song } 24d21b3d34SFangrui Song 25d21b3d34SFangrui Song __attribute__((noinline)) 26d21b3d34SFangrui Song void fn_f(int a) { 27d21b3d34SFangrui Song fn_g(a); 28d21b3d34SFangrui Song } 29d21b3d34SFangrui Song 30d21b3d34SFangrui Song int main(int argc, char *argv[]) { 31d21b3d34SFangrui Song int volatile z; 32d21b3d34SFangrui Song fn_f(z); 33d21b3d34SFangrui Song return x; 34d21b3d34SFangrui Song } 35