1*f831d6fcSDmitry Vyukov // RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s 2*f831d6fcSDmitry Vyukov #include "test.h" 3*f831d6fcSDmitry Vyukov #include <fcntl.h> 4*f831d6fcSDmitry Vyukov #include <sys/stat.h> 5*f831d6fcSDmitry Vyukov #include <sys/types.h> 6*f831d6fcSDmitry Vyukov Thread(void * arg)7*f831d6fcSDmitry Vyukovvoid *Thread(void *arg) { 8*f831d6fcSDmitry Vyukov char buf; 9*f831d6fcSDmitry Vyukov read((long)arg, &buf, 1); 10*f831d6fcSDmitry Vyukov barrier_wait(&barrier); 11*f831d6fcSDmitry Vyukov return NULL; 12*f831d6fcSDmitry Vyukov } 13*f831d6fcSDmitry Vyukov main()14*f831d6fcSDmitry Vyukovint main() { 15*f831d6fcSDmitry Vyukov barrier_init(&barrier, 2); 16*f831d6fcSDmitry Vyukov int fd = open("/dev/random", O_RDONLY); 17*f831d6fcSDmitry Vyukov pthread_t t; 18*f831d6fcSDmitry Vyukov pthread_create(&t, NULL, Thread, (void *)(long)fd); 19*f831d6fcSDmitry Vyukov barrier_wait(&barrier); 20*f831d6fcSDmitry Vyukov close(fd); 21*f831d6fcSDmitry Vyukov pthread_join(t, NULL); 22*f831d6fcSDmitry Vyukov fprintf(stderr, "DONE\n"); 23*f831d6fcSDmitry Vyukov } 24*f831d6fcSDmitry Vyukov 25*f831d6fcSDmitry Vyukov // CHECK: WARNING: ThreadSanitizer: data race 26*f831d6fcSDmitry Vyukov // CHECK: DONE 27