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 6e6a6183eSAlexey Samsonov #include <pthread.h> 7e6a6183eSAlexey Samsonov #include <stdio.h> 8e6a6183eSAlexey Samsonov #include <stddef.h> 9e6a6183eSAlexey Samsonov #include <unistd.h> 10e6a6183eSAlexey Samsonov 11e6a6183eSAlexey Samsonov pthread_barrier_t B; 12e6a6183eSAlexey Samsonov int Global; 13e6a6183eSAlexey Samsonov Thread1(void * x)14e6a6183eSAlexey Samsonovvoid *Thread1(void *x) { 15e6a6183eSAlexey Samsonov if (pthread_barrier_wait(&B) == PTHREAD_BARRIER_SERIAL_THREAD) 16e6a6183eSAlexey Samsonov pthread_barrier_destroy(&B); 17e6a6183eSAlexey Samsonov return NULL; 18e6a6183eSAlexey Samsonov } 19e6a6183eSAlexey Samsonov Thread2(void * x)20e6a6183eSAlexey Samsonovvoid *Thread2(void *x) { 21e6a6183eSAlexey Samsonov if (pthread_barrier_wait(&B) == PTHREAD_BARRIER_SERIAL_THREAD) 22e6a6183eSAlexey Samsonov pthread_barrier_destroy(&B); 23e6a6183eSAlexey Samsonov return NULL; 24e6a6183eSAlexey Samsonov } 25e6a6183eSAlexey Samsonov main()26e6a6183eSAlexey Samsonovint main() { 27e6a6183eSAlexey Samsonov pthread_barrier_init(&B, 0, 2); 28e6a6183eSAlexey Samsonov pthread_t t; 29e6a6183eSAlexey Samsonov pthread_create(&t, NULL, Thread1, NULL); 30e6a6183eSAlexey Samsonov Thread2(0); 31e6a6183eSAlexey Samsonov pthread_join(t, NULL); 32e6a6183eSAlexey Samsonov return 0; 33e6a6183eSAlexey Samsonov } 34e6a6183eSAlexey Samsonov 35e6a6183eSAlexey Samsonov // CHECK: WARNING: ThreadSanitizer: data race 36