diff options
author | Alexey Samsonov <samsonov@google.com> | 2012-12-03 19:12:58 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2012-12-03 19:12:58 +0000 |
commit | 9ab73626fc3881ecfad2b71d942ecd31e81e9e35 (patch) | |
tree | 3807ccb7ec789ab68d0b4cbe50490b1737824c41 /clang/lib/CodeGen/BackendUtil.cpp | |
parent | ef51c3ff819dae6f63c994cc5836d78e6794c427 (diff) | |
download | bcm5719-llvm-9ab73626fc3881ecfad2b71d942ecd31e81e9e35.tar.gz bcm5719-llvm-9ab73626fc3881ecfad2b71d942ecd31e81e9e35.zip |
Add Clang flags -fsanitize-blacklist and -fno-sanitize-blacklist. Make this flag usable for ASan. Blacklisting can be used to disable sanitizer checks for particular file/function/object.
llvm-svn: 169144
Diffstat (limited to 'clang/lib/CodeGen/BackendUtil.cpp')
-rw-r--r-- | clang/lib/CodeGen/BackendUtil.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 4fe1c80e48a..414f65ecf38 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -139,10 +139,13 @@ public: // we add to the PassManagerBuilder. class PassManagerBuilderWrapper : public PassManagerBuilder { public: - PassManagerBuilderWrapper(const LangOptions &LangOpts) - : PassManagerBuilder(), LangOpts(LangOpts) {} + PassManagerBuilderWrapper(const CodeGenOptions &CGOpts, + const LangOptions &LangOpts) + : PassManagerBuilder(), CGOpts(CGOpts), LangOpts(LangOpts) {} + const CodeGenOptions &getCGOpts() const { return CGOpts; } const LangOptions &getLangOpts() const { return LangOpts; } private: + const CodeGenOptions &CGOpts; const LangOptions &LangOpts; }; @@ -172,11 +175,14 @@ static void addAddressSanitizerPasses(const PassManagerBuilder &Builder, PassManagerBase &PM) { const PassManagerBuilderWrapper &BuilderWrapper = static_cast<const PassManagerBuilderWrapper&>(Builder); + const CodeGenOptions &CGOpts = BuilderWrapper.getCGOpts(); const LangOptions &LangOpts = BuilderWrapper.getLangOpts(); PM.add(createAddressSanitizerFunctionPass(LangOpts.SanitizeInitOrder, LangOpts.SanitizeUseAfterReturn, - LangOpts.SanitizeUseAfterScope)); - PM.add(createAddressSanitizerModulePass(LangOpts.SanitizeInitOrder)); + LangOpts.SanitizeUseAfterScope, + CGOpts.SanitizerBlacklistFile)); + PM.add(createAddressSanitizerModulePass(LangOpts.SanitizeInitOrder, + CGOpts.SanitizerBlacklistFile)); } static void addMemorySanitizerPass(const PassManagerBuilder &Builder, @@ -200,7 +206,7 @@ void EmitAssemblyHelper::CreatePasses(TargetMachine *TM) { Inlining = CodeGenOpts.NoInlining; } - PassManagerBuilderWrapper PMBuilder(LangOpts); + PassManagerBuilderWrapper PMBuilder(CodeGenOpts, LangOpts); PMBuilder.OptLevel = OptLevel; PMBuilder.SizeLevel = CodeGenOpts.OptimizeSize; |