Mercurial > hg > CbC > CbC_llvm
diff compiler-rt/test/tsan/fork_atexit.cpp @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/compiler-rt/test/tsan/fork_atexit.cpp Thu Feb 13 15:10:13 2020 +0900 @@ -0,0 +1,37 @@ +// RUN: %clangxx_tsan -O1 %s -o %t && %env_tsan_opts=atexit_sleep_ms=50 %run %t 2>&1 | FileCheck %s +#include <pthread.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/wait.h> + +void foo() { + fprintf(stderr, "CHILD ATEXIT\n"); +} + +void *worker(void *unused) { + return 0; +} + +int main() { + pthread_t t; + pthread_create(&t, NULL, worker, NULL); + int pid = fork(); + if (pid == 0) { + // child + atexit(foo); + fprintf(stderr, "CHILD DONE\n"); + } else { + pthread_join(t, 0); + if (waitpid(pid, 0, 0) == -1) { + perror("waitpid"); + exit(1); + } + fprintf(stderr, "PARENT DONE\n"); + } +} + +// CHECK: CHILD DONE +// CHECK: CHILD ATEXIT +// CHECK: PARENT DONE