https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104539
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |missed-optimization Last reconfirmed| |2022-02-15 Component|tree-optimization |c++ Ever confirmed|0 |1 CC| |hubicka at gcc dot gnu.org, | |jason at gcc dot gnu.org Status|UNCONFIRMED |NEW Known to fail| |12.0 --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- t.ii:9:20: missed: not inlinable: int g()/1 -> int f() [with int <anonymous> = 0]/0, function body can be overwritten at link time so the issue seems to be that explicitely instantiating changes _Z1fILi0EEiv/1 (int f() [with int <anonymous> = 0]) @0x7ffff6697220 Type: function definition analyzed Visibility: semantic_interposition public weak comdat comdat_group:_Z1fILi0EEiv one_only Aux: @0x42d7d00 References: Referring: Function flags: body Called by: _Z1gv/0 Calls: to _Z1fILi0EEiv/0 (int f() [with int <anonymous> = 0]) @0x7ffff6697000 Type: function definition analyzed Visibility: forced_by_abi semantic_interposition public weak comdat_group:_Z1fILi0EEiv one_only Aux: @0x7ffff6697220 References: Referring: Function flags: body Called by: _Z1gv/1 (can throw external) Calls: the explicit instantiation lacks COMDAT (but has comdat_group) and it has forced_by_abi. I'm not sure the C++ standard calls out any semantic difference for explicit vs. implicit instantiations but maybe the Itanium ABI does. Jason? Honza?