17e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov// Test blacklist functionality for TSan.
27e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov
35d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: echo "fun:*Blacklisted_Thread2*" > %t.blacklist
45d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %clangxx_tsan -O1 %s -fsanitize-blacklist=%t.blacklist -o %t && %run %t 2>&1 | FileCheck %s
57e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov#include <pthread.h>
67e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov#include <stdio.h>
77e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov
87e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonovint Global;
97e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov
107e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonovvoid *Thread1(void *x) {
117e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov  Global++;
127e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov  return NULL;
137e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov}
147e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov
1589efdc5f601988a96413585da55dfd9ffc396509Alexey Samsonovvoid *Blacklisted_Thread2(void *x) {
167e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov  Global--;
177e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov  return NULL;
187e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov}
197e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov
207e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonovint main() {
217e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov  pthread_t t[2];
227e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov  pthread_create(&t[0], NULL, Thread1, NULL);
2389efdc5f601988a96413585da55dfd9ffc396509Alexey Samsonov  pthread_create(&t[1], NULL, Blacklisted_Thread2, NULL);
247e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov  pthread_join(t[0], NULL);
257e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov  pthread_join(t[1], NULL);
267e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov  printf("PASS\n");
277e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov  return 0;
287e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov}
297e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov
307e3d21fac4e6407b04f9948309f86adc609720abAlexey Samsonov// CHECK-NOT: ThreadSanitizer: data race
31