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