thread_name2.cc
1 // RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s 2 #include "test.h" 3 4 #if defined(__FreeBSD__) 5 #include <pthread_np.h> 6 #define pthread_setname_np pthread_set_name_np 7 #endif 8 9 int Global; 10 11 void *Thread1(void *x) { 12 barrier_wait(&barrier); 13 Global++; 14 return 0; 15 } 16 17 void *Thread2(void *x) { 18 pthread_setname_np(pthread_self(), "foobar2"); 19 Global--; 20 barrier_wait(&barrier); 21 return 0; 22 } 23 24 int main() { 25 barrier_init(&barrier, 3); 26 pthread_t t[2]; 27 pthread_create(&t[0], 0, Thread1, 0); 28 pthread_create(&t[1], 0, Thread2, 0); 29 pthread_setname_np(t[0], "foobar1"); 30 barrier_wait(&barrier); 31 pthread_join(t[0], NULL); 32 pthread_join(t[1], NULL); 33 } 34 35 // CHECK: WARNING: ThreadSanitizer: data race 36 // CHECK: Thread T1 'foobar1' 37 // CHECK: Thread T2 'foobar2'