1 // RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t 2>&1 | FileCheck %s
2 #include "syscall.h"
3 #include "../test.h"
4 #include <errno.h>
5 #include <sys/types.h>
6 #include <sys/wait.h>
7 
8 int pipefd[2];
9 char buf[10];
10 
thr(void * p)11 static void *thr(void *p) {
12   barrier_wait(&barrier);
13   mywrite(pipefd[1], buf, sizeof(buf));
14   return 0;
15 }
16 
main()17 int main() {
18   barrier_init(&barrier, 2);
19   if (mypipe(pipefd))
20     exit((perror("pipe"), 1));
21   mywrite(pipefd[1], buf, sizeof(buf));
22   pthread_t th;
23   pthread_create(&th, 0, thr, 0);
24   myread(pipefd[0], buf, sizeof(buf));
25   barrier_wait(&barrier);
26   pthread_join(th, 0);
27   fprintf(stderr, "DONE\n");
28 }
29 
30 // CHECK: WARNING: ThreadSanitizer: data race
31 // CHECK:   Read of size 8
32 // CHECK:     #0 mywrite
33 // CHECK:     #1 thr
34 // CHECK:   Previous write of size 8
35 // CHECK:     #0 myread
36 // CHECK:     #1 main
37 // CHECK: DONE
38