[compiler-rt] r204810 - tsan: add pthread_barrier_t test
Dmitry Vyukov
dvyukov at google.com
Wed Mar 26 07:13:49 PDT 2014
Author: dvyukov
Date: Wed Mar 26 09:13:49 2014
New Revision: 204810
URL: http://llvm.org/viewvc/llvm-project?rev=204810&view=rev
Log:
tsan: add pthread_barrier_t test
Added:
compiler-rt/trunk/test/tsan/barrier.cc
Added: compiler-rt/trunk/test/tsan/barrier.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/barrier.cc?rev=204810&view=auto
==============================================================================
--- compiler-rt/trunk/test/tsan/barrier.cc (added)
+++ compiler-rt/trunk/test/tsan/barrier.cc Wed Mar 26 09:13:49 2014
@@ -0,0 +1,37 @@
+// RUN: %clang_tsan -O1 %s -o %t && %t 2>&1 | FileCheck %s
+// CHECK-NOT: ThreadSanitizer: data race
+// CHECK: DONE
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <unistd.h>
+
+const int kSize = 4;
+volatile int kIter = 10; // prevent unwinding
+int data[2][kSize];
+pthread_barrier_t barrier;
+
+void *thr(void *p) {
+ int idx = (int)(long)p;
+ for (int i = 0; i < kIter; i++) {
+ int *prev = data[i % 2];
+ int *curr = data[(i + 1) % 2];
+ int left = idx - 1 >= 0 ? prev[idx - 1] : 0;
+ int right = idx + 1 < kSize ? prev[idx + 1] : 0;
+ curr[idx] = (left + right) / 2;
+ pthread_barrier_wait(&barrier);
+ }
+ return 0;
+}
+
+int main() {
+ pthread_barrier_init(&barrier, 0, kSize);
+ pthread_t th[kSize];
+ for (int i = 0; i < kSize; i++)
+ pthread_create(&th[i], 0, thr, (void*)(long)i);
+ for (int i = 0; i < kSize; i++)
+ pthread_join(th[i], 0);
+ pthread_barrier_destroy(&barrier);
+ fprintf(stderr, "DONE\n");
+}
More information about the llvm-commits
mailing list