diff --git a/compiler-rt/test/hwasan/TestCases/longjmp-setjmp-interception.c b/compiler-rt/test/hwasan/TestCases/longjmp-setjmp-interception.c --- a/compiler-rt/test/hwasan/TestCases/longjmp-setjmp-interception.c +++ b/compiler-rt/test/hwasan/TestCases/longjmp-setjmp-interception.c @@ -1,9 +1,13 @@ -// RUN: %clang_hwasan -g %s -o %t && not %run %t 2>&1 | FileCheck %s +// RUN: %clang_hwasan -g %s -o %t +// RUN: not %run %t 0 2>&1 | FileCheck %s +// RUN: not %run %t -33 2>&1 | FileCheck %s // Only implemented for interceptor ABI on AArch64. // REQUIRES: aarch64-target-arch +#include #include #include +#include /* Testing longjmp/setjmp should test that accesses to scopes jmp'd over are caught. */ @@ -11,10 +15,7 @@ uses_longjmp(int **other_array, int num, jmp_buf env) { int internal_array[100] = {0}; *other_array = &internal_array[0]; - if (num % 2) - longjmp(env, num); - else - return num % 8; + longjmp(env, num); } int __attribute__((noinline)) uses_setjmp(int num) { @@ -23,6 +24,7 @@ sigjmp_buf cur_env; int temp = 0; if ((temp = sigsetjmp(cur_env, 1)) != 0) { + assert((num == 0 && temp == 1) || (num != 0 && temp == num)); // We're testing that our longjmp interceptor untagged the previous stack. // Hence the tag in memory should be zero. if (other_array != NULL) @@ -33,7 +35,9 @@ return uses_longjmp(&other_array, num, cur_env); } -int __attribute__((noinline)) main() { - uses_setjmp(1); +int __attribute__((noinline)) main(int argc, char *argv[]) { + assert(argc == 2); + int longjmp_retval = atoi(argv[1]); + uses_setjmp(longjmp_retval); return 0; }