brintos

brintos / llvm-project-archived public Read only

0
0
Text · 838 B · 80f3f21 Raw
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