|  | // RUN: %clangxx_msan -std=c++11 -O0 -g %s -o %t && %run %t | 
|  |  | 
|  | #include <assert.h> | 
|  | #include <sanitizer/msan_interface.h> | 
|  | #include <signal.h> | 
|  | #include <sys/time.h> | 
|  | #include <unistd.h> | 
|  |  | 
|  | void test_sigwaitinfo() { | 
|  | sigset_t s; | 
|  | sigemptyset(&s); | 
|  | sigaddset(&s, SIGUSR1); | 
|  | sigprocmask(SIG_BLOCK, &s, 0); | 
|  |  | 
|  | if (pid_t pid = fork()) { | 
|  | kill(pid, SIGUSR1); | 
|  | _exit(0); | 
|  | } else { | 
|  | siginfo_t info; | 
|  | int res = sigwaitinfo(&s, &info); | 
|  | assert(!res); | 
|  | // The following checks that sig is initialized. | 
|  | assert(info.si_signo == SIGUSR1); | 
|  | assert(-1 == __msan_test_shadow(&info, sizeof(info))); | 
|  | } | 
|  | } | 
|  |  | 
|  | int main(void) { | 
|  | test_sigwaitinfo(); | 
|  | return 0; | 
|  | } |