| // RUN: %clangxx_tsan %s -o %t |
| // RUN: %run %t 2>&1 | FileCheck %s |
| |
| // bench.h needs pthread barriers which are not available on OS X |
| // UNSUPPORTED: darwin |
| |
| #include "bench.h" |
| |
| int *x; |
| const int kStride = 32; |
| |
| void thread(int tid) { |
| __atomic_load_n(&x[tid * kStride], __ATOMIC_ACQUIRE); |
| for (int i = 0; i < bench_niter; i++) |
| __atomic_store_n(&x[tid * kStride], 0, __ATOMIC_RELEASE); |
| } |
| |
| void bench() { |
| x = (int*)malloc(bench_nthread * kStride * sizeof(x[0])); |
| for (int i = 0; i < bench_nthread; i++) |
| __atomic_store_n(&x[i * kStride], 0, __ATOMIC_RELEASE); |
| start_thread_group(bench_nthread, thread); |
| } |
| |
| // CHECK: DONE |
| |