https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115255
Bug ID: 115255
Summary: sibcall at -O0 causes ICE in df_refs_verify on arm
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: andi-gcc at firstfloor dot org
Target Milestone: ---
Note to trigger this bug need to modify tree-tailcall to run at -O0 (which is
done for musttail), e.g. by the patches here:
https://gcc.gnu.org/pipermail/gcc-patches/2024-May/thread.html#652312
On ARM targets with -O0 I see
int __attribute__((noinline,noclone,noipa))callee (int i);
int __attribute__((noinline,noclone,noipa))
caller (int i)
{
[[gnu::musttail]] return callee (i + 1);
}
../musttail1.c: In function ‘caller’:
../musttail1.c:14:1: internal compiler error: in df_refs_verify, at
df-scan.cc:4022
14 | }
| ^
0x87d483 df_refs_verify
../../gcc/gcc/df-scan.cc:4022
0xaa7d56 df_insn_refs_verify
../../gcc/gcc/df-scan.cc:4101
0xaa996b df_bb_verify
../../gcc/gcc/df-scan.cc:4138
0xaa9ce7 df_scan_verify()
../../gcc/gcc/df-scan.cc:4259
0xa979c2 df_verify()
../../gcc/gcc/df-core.cc:1834
0xa97a2a df_analyze_1
../../gcc/gcc/df-core.cc:1221
0xa97c31 df_analyze()
../../gcc/gcc/df-core.cc:1305
0x12607f0 thumb2_reorg
../../gcc/gcc/config/arm/arm.cc:19392
0x127522b arm_reorg
../../gcc/gcc/config/arm/arm.cc:19611
0xea6eab execute
../../gcc/gcc/reorg.cc:3931
arm_reorg is just before sched2.
The assert happens because the REG/REGNO of the new df chain changes when it is
rebuilt (differs by one from the old). Presumably changed by ipa or reload
since there are very few passes at -O0. I'm not fully sure which data structure
is stale.
I tried to add the df_analyze in the same position on x86, but the problem is
not triggered there.