1*bcaeed49SFangrui Song // RUN: %clangxx_tsan -O1 %s -o %t && not %run %t 2>&1 | FileCheck %s 2*bcaeed49SFangrui Song #include "test.h" 3*bcaeed49SFangrui Song 4*bcaeed49SFangrui Song const int kThreads = 16; 5*bcaeed49SFangrui Song const int kIters = 1000; 6*bcaeed49SFangrui Song 7*bcaeed49SFangrui Song volatile int X = 0; 8*bcaeed49SFangrui Song thr(void * arg)9*bcaeed49SFangrui Songvoid *thr(void *arg) { 10*bcaeed49SFangrui Song for (int i = 0; i < kIters; i++) 11*bcaeed49SFangrui Song X++; 12*bcaeed49SFangrui Song return 0; 13*bcaeed49SFangrui Song } 14*bcaeed49SFangrui Song main()15*bcaeed49SFangrui Songint main() { 16*bcaeed49SFangrui Song pthread_t th[kThreads]; 17*bcaeed49SFangrui Song for (int i = 0; i < kThreads; i++) 18*bcaeed49SFangrui Song pthread_create(&th[i], 0, thr, 0); 19*bcaeed49SFangrui Song for (int i = 0; i < kThreads; i++) 20*bcaeed49SFangrui Song pthread_join(th[i], 0); 21*bcaeed49SFangrui Song fprintf(stderr, "DONE\n"); 22*bcaeed49SFangrui Song } 23*bcaeed49SFangrui Song 24*bcaeed49SFangrui Song // CHECK: ThreadSanitizer: data race 25*bcaeed49SFangrui Song // CHECK: DONE 26