1233f401cSDmitry Vyukov // RUN: %clang_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s 2*6e90edf8SKuba Brecka 3*6e90edf8SKuba Brecka // pthread barriers are not available on OS X 4*6e90edf8SKuba Brecka // UNSUPPORTED: darwin 5*6e90edf8SKuba Brecka 63ab6b234SDmitry Vyukov #include "test.h" 7e6a6183eSAlexey Samsonov 8e6a6183eSAlexey Samsonov pthread_barrier_t B; 9e6a6183eSAlexey Samsonov int Global; 10e6a6183eSAlexey Samsonov Thread1(void * x)11e6a6183eSAlexey Samsonovvoid *Thread1(void *x) { 12e6a6183eSAlexey Samsonov pthread_barrier_init(&B, 0, 2); 133ab6b234SDmitry Vyukov barrier_wait(&barrier); 14e6a6183eSAlexey Samsonov pthread_barrier_wait(&B); 15e6a6183eSAlexey Samsonov return NULL; 16e6a6183eSAlexey Samsonov } 17e6a6183eSAlexey Samsonov Thread2(void * x)18e6a6183eSAlexey Samsonovvoid *Thread2(void *x) { 193ab6b234SDmitry Vyukov barrier_wait(&barrier); 20e6a6183eSAlexey Samsonov pthread_barrier_wait(&B); 21e6a6183eSAlexey Samsonov return NULL; 22e6a6183eSAlexey Samsonov } 23e6a6183eSAlexey Samsonov main()24e6a6183eSAlexey Samsonovint main() { 253ab6b234SDmitry Vyukov barrier_init(&barrier, 2); 26e6a6183eSAlexey Samsonov pthread_t t; 27e6a6183eSAlexey Samsonov pthread_create(&t, NULL, Thread1, NULL); 28e6a6183eSAlexey Samsonov Thread2(0); 29e6a6183eSAlexey Samsonov pthread_join(t, NULL); 30e6a6183eSAlexey Samsonov pthread_barrier_destroy(&B); 31e6a6183eSAlexey Samsonov return 0; 32e6a6183eSAlexey Samsonov } 33e6a6183eSAlexey Samsonov 34e6a6183eSAlexey Samsonov // CHECK: WARNING: ThreadSanitizer: data race 35