1*d21b3d34SFangrui Song // RUN: %clangxx_msan -std=c++11 -O0 -g %s -o %t && %run %t 2*d21b3d34SFangrui Song 3*d21b3d34SFangrui Song #include <assert.h> 4*d21b3d34SFangrui Song #include <sanitizer/msan_interface.h> 5*d21b3d34SFangrui Song #include <signal.h> 6*d21b3d34SFangrui Song #include <sys/time.h> 7*d21b3d34SFangrui Song #include <unistd.h> 8*d21b3d34SFangrui Song test_sigwaitinfo()9*d21b3d34SFangrui Songvoid test_sigwaitinfo() { 10*d21b3d34SFangrui Song sigset_t s; 11*d21b3d34SFangrui Song sigemptyset(&s); 12*d21b3d34SFangrui Song sigaddset(&s, SIGUSR1); 13*d21b3d34SFangrui Song sigprocmask(SIG_BLOCK, &s, 0); 14*d21b3d34SFangrui Song 15*d21b3d34SFangrui Song if (pid_t pid = fork()) { 16*d21b3d34SFangrui Song kill(pid, SIGUSR1); 17*d21b3d34SFangrui Song _exit(0); 18*d21b3d34SFangrui Song } else { 19*d21b3d34SFangrui Song siginfo_t info; 20*d21b3d34SFangrui Song int res = sigwaitinfo(&s, &info); 21*d21b3d34SFangrui Song assert(!res); 22*d21b3d34SFangrui Song // The following checks that sig is initialized. 23*d21b3d34SFangrui Song assert(info.si_signo == SIGUSR1); 24*d21b3d34SFangrui Song assert(-1 == __msan_test_shadow(&info, sizeof(info))); 25*d21b3d34SFangrui Song } 26*d21b3d34SFangrui Song } 27*d21b3d34SFangrui Song main(void)28*d21b3d34SFangrui Songint main(void) { 29*d21b3d34SFangrui Song test_sigwaitinfo(); 30*d21b3d34SFangrui Song return 0; 31*d21b3d34SFangrui Song } 32