1*7c3d14c8STreehugger Robot // Test blacklist functionality for TSan. 2*7c3d14c8STreehugger Robot 3*7c3d14c8STreehugger Robot // RUN: echo "fun:*Blacklisted_Thread2*" > %t.blacklist 4*7c3d14c8STreehugger Robot // RUN: %clangxx_tsan -O1 %s -fsanitize-blacklist=%t.blacklist -o %t && %run %t 2>&1 | FileCheck %s 5*7c3d14c8STreehugger Robot #include <pthread.h> 6*7c3d14c8STreehugger Robot #include <stdio.h> 7*7c3d14c8STreehugger Robot 8*7c3d14c8STreehugger Robot int Global; 9*7c3d14c8STreehugger Robot Thread1(void * x)10*7c3d14c8STreehugger Robotvoid *Thread1(void *x) { 11*7c3d14c8STreehugger Robot Global++; 12*7c3d14c8STreehugger Robot return NULL; 13*7c3d14c8STreehugger Robot } 14*7c3d14c8STreehugger Robot Blacklisted_Thread2(void * x)15*7c3d14c8STreehugger Robotvoid *Blacklisted_Thread2(void *x) { 16*7c3d14c8STreehugger Robot Global--; 17*7c3d14c8STreehugger Robot return NULL; 18*7c3d14c8STreehugger Robot } 19*7c3d14c8STreehugger Robot main()20*7c3d14c8STreehugger Robotint main() { 21*7c3d14c8STreehugger Robot pthread_t t[2]; 22*7c3d14c8STreehugger Robot pthread_create(&t[0], NULL, Thread1, NULL); 23*7c3d14c8STreehugger Robot pthread_create(&t[1], NULL, Blacklisted_Thread2, NULL); 24*7c3d14c8STreehugger Robot pthread_join(t[0], NULL); 25*7c3d14c8STreehugger Robot pthread_join(t[1], NULL); 26*7c3d14c8STreehugger Robot fprintf(stderr, "PASS\n"); 27*7c3d14c8STreehugger Robot return 0; 28*7c3d14c8STreehugger Robot } 29*7c3d14c8STreehugger Robot 30*7c3d14c8STreehugger Robot // CHECK-NOT: ThreadSanitizer: data race 31