1bcaeed49SFangrui Song // RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s 2bcaeed49SFangrui Song #include "test.h" 3bcaeed49SFangrui Song 4bcaeed49SFangrui Song // Test for https://github.com/google/sanitizers/issues/602 5bcaeed49SFangrui Song Thread(void * a)6bcaeed49SFangrui Songvoid *Thread(void *a) { 7bcaeed49SFangrui Song __atomic_store_n((int*)a, 1, __ATOMIC_RELAXED); 8bcaeed49SFangrui Song return 0; 9bcaeed49SFangrui Song } 10bcaeed49SFangrui Song main()11bcaeed49SFangrui Songint main() { 12bcaeed49SFangrui Song int *a = new int(0); 13bcaeed49SFangrui Song pthread_t t; 14bcaeed49SFangrui Song pthread_create(&t, 0, Thread, a); 15bcaeed49SFangrui Song while (__atomic_load_n(a, __ATOMIC_RELAXED) == 0) 16bcaeed49SFangrui Song sched_yield(); 17bcaeed49SFangrui Song delete a; 18bcaeed49SFangrui Song pthread_join(t, 0); 19bcaeed49SFangrui Song } 20bcaeed49SFangrui Song 21bcaeed49SFangrui Song // CHECK: WARNING: ThreadSanitizer: data race 22bcaeed49SFangrui Song // CHECK: Write 23bcaeed49SFangrui Song // CHECK: #0 operator delete 24bcaeed49SFangrui Song // CHECK: #1 main 25bcaeed49SFangrui Song 26bcaeed49SFangrui Song // CHECK: Previous atomic write 27*da7a5c09SDmitry Vyukov // CHECK: #0 Thread 28