xref: /llvm-project/compiler-rt/test/tsan/atomic_free3.cpp (revision da7a5c09c86c3f639c63ce8843d6f21c915ae1c6)
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 Song void *Thread(void *a) {
7bcaeed49SFangrui Song   __atomic_store_n((int*)a, 1, __ATOMIC_RELAXED);
8bcaeed49SFangrui Song   return 0;
9bcaeed49SFangrui Song }
10bcaeed49SFangrui Song 
main()11bcaeed49SFangrui Song int 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