diff mbox series

testsuite: Fix tail_call and musttail effective targets [PR116080]

Message ID 20241003134835.627238-1-christophe.lyon@linaro.org
State New
Headers show
Series testsuite: Fix tail_call and musttail effective targets [PR116080] | expand

Commit Message

Christophe Lyon Oct. 3, 2024, 1:48 p.m. UTC
Some of the musttail tests (eg musttail7.c) fail on arm-eabi because
check_effective_target_musttail pass, but the actual code in the test
is rejected.

The reason is that on arm-eabi with the default configuration, the
compiler targets armv4t for which TARGET_INTERWORK is true, making
arm_function_ok_for_sibcall reject a tail-call candidate if
TREE_ASM_WRITTEN (decl) is false.

For more recent architecture versions, TARGET_INTERWORK is false,
hence the problem was not seen on all arm configurations.

musttail7.c is in turn rejected because f2 is recursive, so
TREE_ASM_WRITTEN is false.

However, the same code used in check_effective_target_musttail is not
recursive and the function body for foo has TREE_ASM_WRITTEN == true.

The simplest fix is to remove the (empty) body for foo () in
check_effective_target_musttail.  For consistency, do the same with
check_effective_target_tail_call.

gcc/testsuite/ChangeLog:
	PR testsuite/116080
	* lib/target-supports.exp (check_effective_target_tail_call):
	Remove foo's body.
	(check_effective_target_musttail): Likewise.
---
 gcc/testsuite/lib/target-supports.exp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Andi Kleen Oct. 3, 2024, 1:50 p.m. UTC | #1
On Thu, Oct 03, 2024 at 01:48:35PM +0000, Christophe Lyon wrote:
> Some of the musttail tests (eg musttail7.c) fail on arm-eabi because
> check_effective_target_musttail pass, but the actual code in the test
> is rejected.
 
Looks good to me. Thanks.

-Andi
diff mbox series

Patch

diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index f92f7f1af9c..d8cdac97b6f 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -12883,7 +12883,7 @@  proc check_effective_target_frame_pointer_for_non_leaf { } {
 # most trivial type.
 proc check_effective_target_tail_call { } {
     return [check_no_messages_and_pattern tail_call ",SIBCALL" rtl-expand {
-	__attribute__((__noipa__)) void foo (void) { }
+	__attribute__((__noipa__)) void foo (void);
 	__attribute__((__noipa__)) void bar (void) { foo(); }
     } {-O2 -fdump-rtl-expand-all}] ;# The "SIBCALL" note requires a detailed dump.
 }
@@ -12893,7 +12893,7 @@  proc check_effective_target_tail_call { } {
 # is supported at -O0.
 proc check_effective_target_musttail { } {
     return [check_no_messages_and_pattern musttail ",SIBCALL" rtl-expand {
-	__attribute__((__noipa__)) void foo (void) { }
+	__attribute__((__noipa__)) void foo (void);
 	__attribute__((__noipa__)) void bar (void) { [[gnu::musttail]] return foo(); }
     } {-fdump-rtl-expand-all}] ;# The "SIBCALL" note requires a detailed dump.
 }