diff options
author | Kuba Brecka <kuba.brecka@gmail.com> | 2015-07-22 10:25:38 +0000 |
---|---|---|
committer | Kuba Brecka <kuba.brecka@gmail.com> | 2015-07-22 10:25:38 +0000 |
commit | a5812d5bbf0a13190b48ac9819ab940e68762239 (patch) | |
tree | 8c4faff3e6beb2cebca1d8b0ad70c4f641ff6f27 /test/Instrumentation | |
parent | f020cb2f752306fa733455085f577e8043de167f (diff) |
[asan] Improve moving of non-instrumented allocas
In r242510, non-instrumented allocas are now moved into the first basic block. This patch limits that to only move allocas that are present *after* the first instrumented one (i.e. only move allocas up). A testcase was updated to show behavior in these two cases. Without the patch, an alloca could be moved down, and could cause an invalid IR.
Differential Revision: http://reviews.llvm.org/D11339
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242883 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Instrumentation')
-rw-r--r-- | test/Instrumentation/AddressSanitizer/debug_info_noninstrumented_alloca.ll | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/test/Instrumentation/AddressSanitizer/debug_info_noninstrumented_alloca.ll b/test/Instrumentation/AddressSanitizer/debug_info_noninstrumented_alloca.ll index 7c38729ff43..844da79f708 100644 --- a/test/Instrumentation/AddressSanitizer/debug_info_noninstrumented_alloca.ll +++ b/test/Instrumentation/AddressSanitizer/debug_info_noninstrumented_alloca.ll @@ -9,18 +9,31 @@ target triple = "x86_64-apple-macosx10.10.0" define i32 @foo() sanitize_address { entry: + ; Won't be instrumented because of asan-skip-promotable-allocas. + %non_instrumented1 = alloca i32, align 4 + ; Regular alloca, will get instrumented (forced by the ptrtoint below). %instrumented = alloca i32, align 4 ; Won't be instrumented because of asan-skip-promotable-allocas. - %non_instrumented = alloca i32, align 4 - store i32 0, i32* %non_instrumented, align 4 - %value = load i32, i32* %non_instrumented, align 4 + %non_instrumented2 = alloca i32, align 4 + + br label %bb0 + +bb0: + ; Won't be instrumented because of asan-skip-promotable-allocas. + %non_instrumented3 = alloca i32, align 4 + + %ptr = ptrtoint i32* %instrumented to i32 + br label %bb1 - %ptr = ptrtoint i32* %instrumented to i64 - ret i32 %value +bb1: + ret i32 %ptr } ; CHECK: entry: -; CHECK: %non_instrumented = alloca i32, align 4 +; CHECK: %non_instrumented1 = alloca i32, align 4 +; CHECK: %non_instrumented2 = alloca i32, align 4 ; CHECK: load i32, i32* @__asan_option_detect_stack_use_after_return +; CHECK: bb0: +; CHECK: %non_instrumented3 = alloca i32, align 4 |