aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/BackendUtil.cpp
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2012-03-01 22:27:08 +0000
committerKostya Serebryany <kcc@google.com>2012-03-01 22:27:08 +0000
commit28a7a1198b60ba73930112191a308eeddcd8102f (patch)
tree6037d41d3e9e832f11fe555c8202c80a22f14bc9 /clang/lib/CodeGen/BackendUtil.cpp
parentc429b80da154c7ee7a9fd81d7707343d77b05565 (diff)
downloadllvm-28a7a1198b60ba73930112191a308eeddcd8102f.zip
llvm-28a7a1198b60ba73930112191a308eeddcd8102f.tar.gz
llvm-28a7a1198b60ba73930112191a308eeddcd8102f.tar.bz2
Add a flag -fthread-sanitizer.
This flag enables ThreadSanitizer instrumentation committed to llvm as r150423. The patch includes one test for -fthread-sanitizer and one similar test for -faddress-sanitizer. This patch does not modify the linker flags (as we do it for -faddress-sanitizer) because the run-time library is not yet committed and it's structure in compiler-rt is not 100% clear. The users manual wil be changed in a separate commit. llvm-svn: 151846
Diffstat (limited to 'clang/lib/CodeGen/BackendUtil.cpp')
-rw-r--r--clang/lib/CodeGen/BackendUtil.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp
index d9bdc32..79cdb3c 100644
--- a/clang/lib/CodeGen/BackendUtil.cpp
+++ b/clang/lib/CodeGen/BackendUtil.cpp
@@ -126,6 +126,11 @@ static void addAddressSanitizerPass(const PassManagerBuilder &Builder,
PM.add(createAddressSanitizerPass());
}
+static void addThreadSanitizerPass(const PassManagerBuilder &Builder,
+ PassManagerBase &PM) {
+ PM.add(createThreadSanitizerPass());
+}
+
void EmitAssemblyHelper::CreatePasses() {
unsigned OptLevel = CodeGenOpts.OptimizationLevel;
CodeGenOptions::InliningMethod Inlining = CodeGenOpts.Inlining;
@@ -161,7 +166,14 @@ void EmitAssemblyHelper::CreatePasses() {
PMBuilder.addExtension(PassManagerBuilder::EP_EnabledOnOptLevel0,
addAddressSanitizerPass);
}
-
+
+ if (LangOpts.ThreadSanitizer) {
+ PMBuilder.addExtension(PassManagerBuilder::EP_ScalarOptimizerLate,
+ addThreadSanitizerPass);
+ PMBuilder.addExtension(PassManagerBuilder::EP_EnabledOnOptLevel0,
+ addThreadSanitizerPass);
+ }
+
// Figure out TargetLibraryInfo.
Triple TargetTriple(TheModule->getTargetTriple());
PMBuilder.LibraryInfo = new TargetLibraryInfo(TargetTriple);