xref: /llvm-project/compiler-rt/test/tsan/ignorelist.cpp (revision d7ec48d71bd67118e7996c45e9c7fb1b09d4f59a)
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 Weber void *Thread1(void *x) {
11*d7ec48d7SNico Weber   Global++;
12*d7ec48d7SNico Weber   return NULL;
13*d7ec48d7SNico Weber }
14*d7ec48d7SNico Weber 
Ignorelisted_Thread2(void * x)15*d7ec48d7SNico Weber void *Ignorelisted_Thread2(void *x) {
16*d7ec48d7SNico Weber   Global--;
17*d7ec48d7SNico Weber   return NULL;
18*d7ec48d7SNico Weber }
19*d7ec48d7SNico Weber 
main()20*d7ec48d7SNico Weber int 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