mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-22 10:33:23 +00:00
4d0a9ff365
These annotations are disabled entirely when either ENABLE_THREADS is off, or building a release build. When enabled, they add calls to functions with no statements to ManagedStatic's getters. Use these annotations to inform tsan that the race used inside ManagedStatic initialization is actually benign. Thanks to Kostya Serebryany for helping write this patch! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144567 91177308-0d34-0410-b5e6-96231b3b80d8
40 lines
975 B
C++
40 lines
975 B
C++
//===- 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
|