]> git.ipfire.org Git - thirdparty/gcc.git/commit
testsuite: Fix tail_call and musttail effective targets [PR116080]
authorChristophe Lyon <christophe.lyon@linaro.org>
Thu, 3 Oct 2024 13:37:16 +0000 (13:37 +0000)
committerChristophe Lyon <christophe.lyon@linaro.org>
Fri, 15 Nov 2024 12:56:02 +0000 (12:56 +0000)
commita064fed18a02696586cd8c182fd56c571c9438c1
treeef8f1205f9d933d05e815cfead3292759c410395
parent5a2c3a69fbdcb56a1d21d340d3b9fb5a9b68b717
testsuite: Fix tail_call and musttail effective targets [PR116080]

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