38 lines · cpp
1// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t 2>&1 | FileCheck %s2#include "syscall.h"3#include "../test.h"4#include <errno.h>5#include <sys/types.h>6#include <sys/wait.h>7 8int pipefd[2];9unsigned long long buf[2];10 11static void *thr(void *p) {12 barrier_wait(&barrier);13 mywrite(pipefd[1], buf, sizeof(buf));14 return 0;15}16 17int 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 race31// CHECK: Read of size 832// CHECK: #0 mywrite33// CHECK: #1 thr34// CHECK: Previous write of size 835// CHECK: #0 myread36// CHECK: #1 main37// CHECK: DONE38