1 // Check that stores in signal handlers are not recorded in origin history. 2 // This is, in fact, undesired behavior caused by our chained origins 3 // implementation being not async-signal-safe. 4 5 // RUN: %clangxx_msan -fsanitize-memory-track-origins=2 -O3 %s -o %t && \ 6 // RUN: not %run %t >%t.out 2>&1 7 // RUN: FileCheck %s < %t.out 8 9 // RUN: %clangxx_msan -mllvm -msan-instrumentation-with-call-threshold=0 -fsanitize-memory-track-origins=2 -O3 %s -o %t && \ 10 // RUN: not %run %t >%t.out 2>&1 11 // RUN: FileCheck %s < %t.out 12 13 // Reported deadly signal due to stack-overflow 14 // XFAIL: netbsd 15 16 #include <signal.h> 17 #include <stdio.h> 18 #include <sys/types.h> 19 #include <unistd.h> 20 21 volatile int x, y; 22 23 void SignalHandler(int signo) { 24 y = x; 25 } 26 27 int main(int argc, char *argv[]) { 28 int volatile z; 29 x = z; 30 31 signal(SIGHUP, SignalHandler); 32 kill(getpid(), SIGHUP); 33 signal(SIGHUP, SIG_DFL); 34 35 return y; 36 } 37 38 // CHECK: WARNING: MemorySanitizer: use-of-uninitialized-value 39 // CHECK-NOT: in SignalHandler 40