From 9ab73626fc3881ecfad2b71d942ecd31e81e9e35 Mon Sep 17 00:00:00 2001 From: Alexey Samsonov Date: Mon, 3 Dec 2012 19:12:58 +0000 Subject: 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 --- clang/lib/CodeGen/BackendUtil.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'clang/lib/CodeGen/BackendUtil.cpp') 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(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; -- cgit v1.2.3