39 lines · cpp
1// RUN: %clangxx_msan -std=c++11 -O0 -g %s -o %t && %run %t2// RUN: %clangxx_msan -DPOSITIVE -std=c++11 -O0 -g %s -o %t && not %run %t 2>&1 | FileCheck %s3 4#include <assert.h>5#include <signal.h>6#include <sys/time.h>7#include <sys/wait.h>8#include <unistd.h>9 10#include <sanitizer/msan_interface.h>11 12void test_sigwait() {13 sigset_t s;14#ifndef POSITIVE15 sigemptyset(&s);16 sigaddset(&s, SIGUSR1);17#endif18 sigprocmask(SIG_BLOCK, &s, 0);19 // CHECK: MemorySanitizer: use-of-uninitialized-value20 21 if (pid_t pid = fork()) {22 kill(pid, SIGUSR1);23 int child_stat;24 wait(&child_stat);25 _exit(!WIFEXITED(child_stat));26 } else {27 int sig;28 int res = sigwait(&s, &sig);29 assert(!res);30 // The following checks that sig is initialized.31 assert(sig == SIGUSR1);32 }33}34 35int main(void) {36 test_sigwait();37 return 0;38}39