diff options
author | Vitaly Buka <vitalybuka@google.com> | 2016-06-02 00:24:20 +0000 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2016-06-02 00:24:20 +0000 |
commit | 9d4eb6f3896154134eed8971e10b90cf52a95392 (patch) | |
tree | 1f99731a8cd4fbb486a78bbb7eae6da55443f2ec /clang/lib/CodeGen/BackendUtil.cpp | |
parent | f818b86348daa08d9040a33ce694c91a68502dd7 (diff) | |
download | llvm-9d4eb6f3896154134eed8971e10b90cf52a95392.zip llvm-9d4eb6f3896154134eed8971e10b90cf52a95392.tar.gz llvm-9d4eb6f3896154134eed8971e10b90cf52a95392.tar.bz2 |
[asan] Added -fsanitize-address-use-after-scope flag
Summary:
Also emit lifetime markers for -fsanitize-address-use-after-scope.
Asan uses life-time markers for use-after-scope check.
PR27453
Reviewers: kcc, eugenis, aizatsky
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D20759
llvm-svn: 271451
Diffstat (limited to 'clang/lib/CodeGen/BackendUtil.cpp')
-rw-r--r-- | clang/lib/CodeGen/BackendUtil.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 0b0b5a7..ac47c99 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -184,7 +184,7 @@ static void addInstructionCombiningPass(const PassManagerBuilder &Builder, } static void addBoundsCheckingPass(const PassManagerBuilder &Builder, - legacy::PassManagerBase &PM) { + legacy::PassManagerBase &PM) { PM.add(createBoundsCheckingPass()); } @@ -210,14 +210,17 @@ static void addAddressSanitizerPasses(const PassManagerBuilder &Builder, static_cast<const PassManagerBuilderWrapper&>(Builder); const CodeGenOptions &CGOpts = BuilderWrapper.getCGOpts(); bool Recover = CGOpts.SanitizeRecover.has(SanitizerKind::Address); - PM.add(createAddressSanitizerFunctionPass(/*CompileKernel*/false, Recover)); + bool UseAfterScope = CGOpts.SanitizeAddressUseAfterScope; + PM.add(createAddressSanitizerFunctionPass(/*CompileKernel*/ false, Recover, + UseAfterScope)); PM.add(createAddressSanitizerModulePass(/*CompileKernel*/false, Recover)); } static void addKernelAddressSanitizerPasses(const PassManagerBuilder &Builder, legacy::PassManagerBase &PM) { - PM.add(createAddressSanitizerFunctionPass(/*CompileKernel*/true, - /*Recover*/true)); + PM.add(createAddressSanitizerFunctionPass( + /*CompileKernel*/ true, + /*Recover*/ true, /*UseAfterScope*/ false)); PM.add(createAddressSanitizerModulePass(/*CompileKernel*/true, /*Recover*/true)); } |