summaryrefslogtreecommitdiff
path: root/unittests
diff options
context:
space:
mode:
Diffstat (limited to 'unittests')
-rw-r--r--unittests/Support/ManagedStatic.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/unittests/Support/ManagedStatic.cpp b/unittests/Support/ManagedStatic.cpp
new file mode 100644
index 0000000000..f1f03208c1
--- /dev/null
+++ b/unittests/Support/ManagedStatic.cpp
@@ -0,0 +1,39 @@
+//===- llvm/unittest/Support/ManagedStatic.cpp - ManagedStatic tests ------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+#include "llvm/Support/ManagedStatic.h"
+#include "llvm/Support/Threading.h"
+#include <pthread.h>
+
+#include "gtest/gtest.h"
+
+using namespace llvm;
+
+namespace {
+
+namespace test1 {
+ llvm::ManagedStatic<int> ms;
+ void *helper(void*) {
+ *ms;
+ return NULL;
+ }
+}
+
+TEST(Initialize, MultipleThreads) {
+ // Run this test under tsan: http://code.google.com/p/data-race-test/
+
+ llvm_start_multithreaded();
+ pthread_t t1, t2;
+ pthread_create(&t1, NULL, test1::helper, NULL);
+ pthread_create(&t2, NULL, test1::helper, NULL);
+ pthread_join(t1, NULL);
+ pthread_join(t2, NULL);
+ llvm_stop_multithreaded();
+}
+
+} // anonymous namespace