https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63851
--- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> ---
OK, I can reproduce the problem on x86_64 with following simple patch applied:
diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
index 4875dec..c985052 100644
--- a/gcc/ipa-icf.c
+++ b/gcc/ipa-icf.c
@@ -606,6 +606,12 @@ sem_function::merge (sem_item *alias_item)
create_thunk = true;
}
+ if (create_alias )
+ {
+ create_thunk = true;
+ create_alias = false;
+ }
+
There's a pair of functions 'g' and 'h' that are proved by IPA ICF to be equal
and thunk is created (darwin does not have alias support).
Semantic equality hit:g->h
Assembler symbol names:g.3324->h.3321
where 'h' looks is created as tail-call:
h (struct array7_integer(kind=4) & restrict x)
{
<bb 2>:
g (x_2(D)); [tail call]
return;
}
and MAIN__:
<bb 8>:
# kk_1 = PHI <kk_36(6), kk_39(7)>
*kk_1 = 489;
desc.6.dtype = 264;
desc.6.data = kk_1;
h (&desc.6); [static-chain: &FRAME.15]
desc.6 ={v} {CLOBBER};
j.8_45 = FRAME.15.j;
if (j.8_45 != 1)
goto <bb 9>;
else
goto <bb 10>;
It looks fine, but after inlining is done, we are given:
assumed_rank_8.f90.063t.copyrename2:
MAIN__:
...
<bb 24>:
# kk_11 = PHI <kk_9(22), kk_10(23)>
*kk_11 = 489;
desc.6.dtype = 264;
desc.6.data = kk_11;
g (&desc.6);
desc.6 ={v} {CLOBBER};
j.8_12 = FRAME.15.j;
if (j.8_12 != 1)
goto <bb 25>;
else
goto <bb 26>;
Is missing [static-chain: &FRAME.15] in 'g (&desc.6);' problematic in this
context?
Thanks,
Martin