aboutsummaryrefslogtreecommitdiff
path: root/lib/tsan/lit_tests/atomic_norace.cc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/tsan/lit_tests/atomic_norace.cc')
-rw-r--r--lib/tsan/lit_tests/atomic_norace.cc61
1 files changed, 0 insertions, 61 deletions
diff --git a/lib/tsan/lit_tests/atomic_norace.cc b/lib/tsan/lit_tests/atomic_norace.cc
deleted file mode 100644
index 265459b0758e..000000000000
--- a/lib/tsan/lit_tests/atomic_norace.cc
+++ /dev/null
@@ -1,61 +0,0 @@
-// RUN: %clangxx_tsan -O1 %s -o %t && %t 2>&1 | FileCheck %s
-#include <pthread.h>
-#include <stdio.h>
-#include <unistd.h>
-
-const int kTestCount = 4;
-typedef long long T;
-T atomics[kTestCount * 2];
-
-void Test(int test, T *p, bool main_thread) {
- volatile T sink;
- if (test == 0) {
- if (main_thread)
- __atomic_fetch_add(p, 1, __ATOMIC_RELAXED);
- else
- __atomic_fetch_add(p, 1, __ATOMIC_RELAXED);
- } else if (test == 1) {
- if (main_thread)
- __atomic_exchange_n(p, 1, __ATOMIC_ACQ_REL);
- else
- __atomic_exchange_n(p, 1, __ATOMIC_ACQ_REL);
- } else if (test == 2) {
- if (main_thread)
- sink = __atomic_load_n(p, __ATOMIC_SEQ_CST);
- else
- __atomic_store_n(p, 1, __ATOMIC_SEQ_CST);
- } else if (test == 3) {
- if (main_thread)
- sink = __atomic_load_n(p, __ATOMIC_SEQ_CST);
- else
- sink = *p;
- }
-}
-
-void *Thread(void *p) {
- for (int i = 0; i < kTestCount; i++) {
- Test(i, &atomics[i], false);
- }
- sleep(2);
- for (int i = 0; i < kTestCount; i++) {
- fprintf(stderr, "Test %d reverse\n", i);
- Test(i, &atomics[kTestCount + i], false);
- }
- return 0;
-}
-
-int main() {
- pthread_t t;
- pthread_create(&t, 0, Thread, 0);
- sleep(1);
- for (int i = 0; i < kTestCount; i++) {
- fprintf(stderr, "Test %d\n", i);
- Test(i, &atomics[i], true);
- }
- for (int i = 0; i < kTestCount; i++) {
- Test(i, &atomics[kTestCount + i], true);
- }
- pthread_join(t, 0);
-}
-
-// CHECK-NOT: ThreadSanitizer: data race