[compiler-rt] ebd4dc4 - [asan, test] Make alloca_loop_unpoisoning.cpp robust and fix s390x failure (#78774)

via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 22 08:56:05 PST 2024


Author: Fangrui Song
Date: 2024-01-22T08:56:00-08:00
New Revision: ebd4dc42630e201c15894b48c3ea890eaa8c3b18

URL: https://github.com/llvm/llvm-project/commit/ebd4dc42630e201c15894b48c3ea890eaa8c3b18
DIFF: https://github.com/llvm/llvm-project/commit/ebd4dc42630e201c15894b48c3ea890eaa8c3b18.diff

LOG: [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.

Added: 
    

Modified: 
    compiler-rt/test/asan/TestCases/alloca_loop_unpoisoning.cpp

Removed: 
    


################################################################################
diff  --git a/compiler-rt/test/asan/TestCases/alloca_loop_unpoisoning.cpp b/compiler-rt/test/asan/TestCases/alloca_loop_unpoisoning.cpp
index ac25a4faa2dc1ba..0967b34dc7dbfef 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));
   }


        


More information about the llvm-commits mailing list