diff options
author | Fangrui Song <i@maskray.me> | 2024-01-22 08:56:00 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-22 08:56:00 -0800 |
commit | ebd4dc42630e201c15894b48c3ea890eaa8c3b18 (patch) | |
tree | 562e3e2eb51fae64e0d337bd6feaa934516f77c7 /compiler-rt | |
parent | ee6199ca3cf101c764788ebf8df5b0e3e00f5538 (diff) | |
download | llvm-ebd4dc42630e201c15894b48c3ea890eaa8c3b18.zip llvm-ebd4dc42630e201c15894b48c3ea890eaa8c3b18.tar.gz llvm-ebd4dc42630e201c15894b48c3ea890eaa8c3b18.tar.bz2 |
[asan,test] Make alloca_loop_unpoisoning.cpp robust and fix s390x failure (#78774)
In the test from https://reviews.llvm.org/D7098, `char array[len];` is
32-byte aligned on most targets whether it is instrumented or not
(optimized by StackSafetyAnalysis), due to the the used `*FrameLowering`
being `StackRealignable`.
However, when using `SystemZELFFrameLowering`, an un-instrumented
`char array[len];` is only 8-byte aligned.
Ensure `char array[len];` gets instrumented like what we did to
`alloca_vla_interact.cpp`, to make the test pass on s390x.
Diffstat (limited to 'compiler-rt')
-rw-r--r-- | compiler-rt/test/asan/TestCases/alloca_loop_unpoisoning.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/compiler-rt/test/asan/TestCases/alloca_loop_unpoisoning.cpp b/compiler-rt/test/asan/TestCases/alloca_loop_unpoisoning.cpp index ac25a4f..0967b34 100644 --- a/compiler-rt/test/asan/TestCases/alloca_loop_unpoisoning.cpp +++ b/compiler-rt/test/asan/TestCases/alloca_loop_unpoisoning.cpp @@ -2,7 +2,6 @@ // RUN: %env_asan_opts=detect_stack_use_after_return=0 %run %t 2>&1 // // REQUIRES: stable-runtime -// UNSUPPORTED: target=s390{{.*}} // This testcase checks that allocas and VLAs inside loop are correctly unpoisoned. @@ -25,11 +24,15 @@ void *top, *bot; __attribute__((noinline)) void foo(int len) { char x; top = &x; - char array[len]; + volatile char array[len]; + if (len) + array[0] = 0; assert(!(reinterpret_cast<uintptr_t>(array) & 31L)); alloca(len); for (int i = 0; i < 32; ++i) { - char array[i]; + volatile char array[i]; + if (i) + array[0] = 0; bot = alloca(i); assert(!(reinterpret_cast<uintptr_t>(bot) & 31L)); } |