mirror of
https://github.com/gcc-mirror/gcc.git
synced 2024-11-21 13:40:47 +00:00
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.
This commit is contained in:
parent
5a2c3a69fb
commit
a064fed18a
@ -12987,7 +12987,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.
|
||||
}
|
||||
@ -12997,7 +12997,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.
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user