1*20ee72d4SDmitry Vyukov // RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s 2*20ee72d4SDmitry Vyukov #include "test.h" 3*20ee72d4SDmitry Vyukov #include <signal.h> 4*20ee72d4SDmitry Vyukov #include <sys/types.h> 5*20ee72d4SDmitry Vyukov handler(int,siginfo_t *,void *)6*20ee72d4SDmitry Vyukovstatic void handler(int, siginfo_t *, void *) { 7*20ee72d4SDmitry Vyukov write(2, "SIGNAL\n", 7); 8*20ee72d4SDmitry Vyukov // CHECK: SIGNAL 9*20ee72d4SDmitry Vyukov _exit(0); 10*20ee72d4SDmitry Vyukov // CHECK-NOT: ThreadSanitizer: signal-unsafe call 11*20ee72d4SDmitry Vyukov } 12*20ee72d4SDmitry Vyukov main()13*20ee72d4SDmitry Vyukovint main() { 14*20ee72d4SDmitry Vyukov struct sigaction act = {}; 15*20ee72d4SDmitry Vyukov act.sa_sigaction = &handler; 16*20ee72d4SDmitry Vyukov act.sa_flags = SA_SIGINFO; 17*20ee72d4SDmitry Vyukov sigaction(SIGPROF, &act, 0); 18*20ee72d4SDmitry Vyukov raise(SIGPROF); 19*20ee72d4SDmitry Vyukov fprintf(stderr, "DONE\n"); 20*20ee72d4SDmitry Vyukov // CHECK-NOT: DONE 21*20ee72d4SDmitry Vyukov return 0; 22*20ee72d4SDmitry Vyukov } 23