// 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; | |
} |