summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/BackendUtil.cpp
diff options
context:
space:
mode:
authorYury Gribov <y.gribov@samsung.com>2015-11-11 10:45:48 +0000
committerYury Gribov <y.gribov@samsung.com>2015-11-11 10:45:48 +0000
commit5bfeca12017d3d8352b7ebc9ea2eeb2f95950395 (patch)
tree2e32d8083d889e2c6e3555770e494058d527334f /clang/lib/CodeGen/BackendUtil.cpp
parentefb0c3780e9bbba16ab014e62b323a86bcce5a31 (diff)
downloadbcm5719-llvm-5bfeca12017d3d8352b7ebc9ea2eeb2f95950395.tar.gz
bcm5719-llvm-5bfeca12017d3d8352b7ebc9ea2eeb2f95950395.zip
[ASan] Allow -fsanitize-recover=address.
Differential Revision: http://reviews.llvm.org/D14243 llvm-svn: 252721
Diffstat (limited to 'clang/lib/CodeGen/BackendUtil.cpp')
-rw-r--r--clang/lib/CodeGen/BackendUtil.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp
index b2a65c6eacb..37e62f8ddcd 100644
--- a/clang/lib/CodeGen/BackendUtil.cpp
+++ b/clang/lib/CodeGen/BackendUtil.cpp
@@ -194,14 +194,20 @@ static void addSanitizerCoveragePass(const PassManagerBuilder &Builder,
static void addAddressSanitizerPasses(const PassManagerBuilder &Builder,
legacy::PassManagerBase &PM) {
- PM.add(createAddressSanitizerFunctionPass(/*CompileKernel*/false));
- PM.add(createAddressSanitizerModulePass(/*CompileKernel*/false));
+ const PassManagerBuilderWrapper &BuilderWrapper =
+ static_cast<const PassManagerBuilderWrapper&>(Builder);
+ const CodeGenOptions &CGOpts = BuilderWrapper.getCGOpts();
+ bool Recover = CGOpts.SanitizeRecover.has(SanitizerKind::Address);
+ PM.add(createAddressSanitizerFunctionPass(/*CompileKernel*/false, Recover));
+ PM.add(createAddressSanitizerModulePass(/*CompileKernel*/false, Recover));
}
static void addKernelAddressSanitizerPasses(const PassManagerBuilder &Builder,
legacy::PassManagerBase &PM) {
- PM.add(createAddressSanitizerFunctionPass(/*CompileKernel*/true));
- PM.add(createAddressSanitizerModulePass(/*CompileKernel*/true));
+ PM.add(createAddressSanitizerFunctionPass(/*CompileKernel*/true,
+ /*Recover*/true));
+ PM.add(createAddressSanitizerModulePass(/*CompileKernel*/true,
+ /*Recover*/true));
}
static void addMemorySanitizerPass(const PassManagerBuilder &Builder,
OpenPOWER on IntegriCloud