aboutsummaryrefslogtreecommitdiff
path: root/compiler-rt
diff options
context:
space:
mode:
authorFangrui Song <i@maskray.me>2024-01-22 08:56:00 -0800
committerGitHub <noreply@github.com>2024-01-22 08:56:00 -0800
commitebd4dc42630e201c15894b48c3ea890eaa8c3b18 (patch)
tree562e3e2eb51fae64e0d337bd6feaa934516f77c7 /compiler-rt
parentee6199ca3cf101c764788ebf8df5b0e3e00f5538 (diff)
downloadllvm-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.cpp9
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));
}