This is needed since eh_return no longer prevents pac-ret in the normal return path.
gcc/testsuite/ChangeLog: * gcc.target/aarch64/return_address_sign_1.c: Move func4 to ... * gcc.target/aarch64/return_address_sign_2.c: ... here and fix the scan asm check. * gcc.target/aarch64/return_address_sign_b_1.c: Move func4 to ... * gcc.target/aarch64/return_address_sign_b_2.c: ... here and fix the scan asm check. --- .../gcc.target/aarch64/return_address_sign_1.c | 13 +------------ .../gcc.target/aarch64/return_address_sign_2.c | 17 +++++++++++++++-- .../aarch64/return_address_sign_b_1.c | 11 ----------- .../aarch64/return_address_sign_b_2.c | 17 +++++++++++++++-- 4 files changed, 31 insertions(+), 27 deletions(-) diff --git a/gcc/testsuite/gcc.target/aarch64/return_address_sign_1.c b/gcc/testsuite/gcc.target/aarch64/return_address_sign_1.c index 232ba67ade0..114a9dacb3f 100644 --- a/gcc/testsuite/gcc.target/aarch64/return_address_sign_1.c +++ b/gcc/testsuite/gcc.target/aarch64/return_address_sign_1.c @@ -37,16 +37,5 @@ func3 (int a, int b, int c) /* autiasp */ } -/* eh_return. */ -void __attribute__ ((target ("arch=armv8.3-a"))) -func4 (long offset, void *handler, int *ptr, int imm1, int imm2) -{ - /* no paciasp */ - *ptr = imm1 + foo (imm1) + imm2; - __builtin_eh_return (offset, handler); - /* no autiasp */ - return; -} - -/* { dg-final { scan-assembler-times "autiasp" 3 } } */ /* { dg-final { scan-assembler-times "paciasp" 3 } } */ +/* { dg-final { scan-assembler-times "autiasp" 3 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/return_address_sign_2.c b/gcc/testsuite/gcc.target/aarch64/return_address_sign_2.c index a4bc5b45333..d93492c3c43 100644 --- a/gcc/testsuite/gcc.target/aarch64/return_address_sign_2.c +++ b/gcc/testsuite/gcc.target/aarch64/return_address_sign_2.c @@ -14,5 +14,18 @@ func1 (int a, int b, int c) /* retaa */ } -/* { dg-final { scan-assembler-times "paciasp" 1 } } */ -/* { dg-final { scan-assembler-times "retaa" 1 } } */ +/* eh_return. */ +void __attribute__ ((target ("arch=armv8.3-a"))) +func4 (long offset, void *handler, int *ptr, int imm1, int imm2) +{ + /* paciasp */ + *ptr = imm1 + foo (imm1) + imm2; + if (handler) + /* br */ + __builtin_eh_return (offset, handler); + /* retaa */ + return; +} + +/* { dg-final { scan-assembler-times "paciasp" 2 } } */ +/* { dg-final { scan-assembler-times "retaa" 2 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/return_address_sign_b_1.c b/gcc/testsuite/gcc.target/aarch64/return_address_sign_b_1.c index 43e32ab6cb7..697fa30dc5a 100644 --- a/gcc/testsuite/gcc.target/aarch64/return_address_sign_b_1.c +++ b/gcc/testsuite/gcc.target/aarch64/return_address_sign_b_1.c @@ -37,16 +37,5 @@ func3 (int a, int b, int c) /* autibsp */ } -/* eh_return. */ -void __attribute__ ((target ("arch=armv8.3-a"))) -func4 (long offset, void *handler, int *ptr, int imm1, int imm2) -{ - /* no pacibsp */ - *ptr = imm1 + foo (imm1) + imm2; - __builtin_eh_return (offset, handler); - /* no autibsp */ - return; -} - /* { dg-final { scan-assembler-times "pacibsp" 3 } } */ /* { dg-final { scan-assembler-times "autibsp" 3 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/return_address_sign_b_2.c b/gcc/testsuite/gcc.target/aarch64/return_address_sign_b_2.c index 9ed64ce0591..748924c72f3 100644 --- a/gcc/testsuite/gcc.target/aarch64/return_address_sign_b_2.c +++ b/gcc/testsuite/gcc.target/aarch64/return_address_sign_b_2.c @@ -14,5 +14,18 @@ func1 (int a, int b, int c) /* retab */ } -/* { dg-final { scan-assembler-times "pacibsp" 1 } } */ -/* { dg-final { scan-assembler-times "retab" 1 } } */ +/* eh_return. */ +void __attribute__ ((target ("arch=armv8.3-a"))) +func4 (long offset, void *handler, int *ptr, int imm1, int imm2) +{ + /* paciasp */ + *ptr = imm1 + foo (imm1) + imm2; + if (handler) + /* br */ + __builtin_eh_return (offset, handler); + /* retab */ + return; +} + +/* { dg-final { scan-assembler-times "pacibsp" 2 } } */ +/* { dg-final { scan-assembler-times "retab" 2 } } */ -- 2.25.1