1*7c3d14c8STreehugger Robot // RUN: %clangxx_tsan %s -o %t 2*7c3d14c8STreehugger Robot // RUN: %env_tsan_opts=verbosity=2:external_symbolizer_path= %deflake %run %t | FileCheck %s 3*7c3d14c8STreehugger Robot #include "../test.h" 4*7c3d14c8STreehugger Robot 5*7c3d14c8STreehugger Robot int GlobalData[10]; 6*7c3d14c8STreehugger Robot Thread(void * a)7*7c3d14c8STreehugger Robotvoid *Thread(void *a) { 8*7c3d14c8STreehugger Robot barrier_wait(&barrier); 9*7c3d14c8STreehugger Robot GlobalData[2] = 42; 10*7c3d14c8STreehugger Robot return 0; 11*7c3d14c8STreehugger Robot } 12*7c3d14c8STreehugger Robot main()13*7c3d14c8STreehugger Robotint main() { 14*7c3d14c8STreehugger Robot barrier_init(&barrier, 2); 15*7c3d14c8STreehugger Robot print_address("addr=", 1, GlobalData); 16*7c3d14c8STreehugger Robot pthread_t t; 17*7c3d14c8STreehugger Robot pthread_create(&t, 0, Thread, 0); 18*7c3d14c8STreehugger Robot GlobalData[2] = 43; 19*7c3d14c8STreehugger Robot barrier_wait(&barrier); 20*7c3d14c8STreehugger Robot pthread_join(t, 0); 21*7c3d14c8STreehugger Robot } 22*7c3d14c8STreehugger Robot 23*7c3d14c8STreehugger Robot // CHECK: External symbolizer is explicitly disabled. 24*7c3d14c8STreehugger Robot // CHECK: Using dladdr symbolizer. 25*7c3d14c8STreehugger Robot // CHECK: addr=[[ADDR:0x[0-9,a-f]+]] 26*7c3d14c8STreehugger Robot // CHECK: WARNING: ThreadSanitizer: data race 27*7c3d14c8STreehugger Robot // CHECK: Location is global 'GlobalData' at [[ADDR]] ({{.*}}+0x{{[0-9,a-f]+}}) 28