https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91872
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |NEW CC| |rguenth at gcc dot gnu.org Assignee|rguenth at gcc dot gnu.org |unassigned at gcc dot gnu.org --- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> --- For the PTA issue the first of the 'this' PARM_DECLs "duplicates" comes from _ZThn16_N12_GLOBAL__N_11B3fooEi.artificial_thunk.0/42 (_ZThn16_N12_GLOBAL__N_11B3fooEi.artificial_thunk.0) @0x7ffff69a6438 Type: function definition analyzed Visibility: artificial References: _ZN12_GLOBAL__N_1L2goE/1 (write) Referring: Availability: local Function flags: count:118111600 (estimated locally) body local nonfreeing_fn Former thunk fixed offset -16 virtual value 0 indirect_offset 0 has virtual offset 0 Called by: int main(int, char**)/24 (955630223 (estimated locally),8.09 per call) void bar()/23 (955630223 (estimated locally),8.09 per call) Calls: and the second _ZThn16_N12_GLOBAL__N_11B3fooEi/19 (virtual void {anonymous}::B::_ZThn16_N12_GLOBAL__N_11B3fooEi(int)) @0x7ffff69a6ca8 Type: function definition analyzed Visibility: prevailing_def_ironly virtual artificial Address is taken. References: _ZN12_GLOBAL__N_1L2goE/1 (write) Referring: _ZTVN12_GLOBAL__N_11BE/25 (addr) Availability: available Function flags: count:118111600 (estimated locally) body nonfreeing_fn Former thunk fixed offset -16 virtual value 0 indirect_offset 0 has virtual offset 0 Called by: Calls: both FUNCTION_DECLs share the same DECL_ARGUMENTS, that doesn't look correct? The duplicate is created by duplicate_thunk_for_node in a new IPA SRA path but I don't see any DECL_ARGUMENTS adjustment / copying of PARM_DECLs? Note both thunks above are "analyzed" and thus have a GIMPLE body. Not a IPA PTA issue but wrong GIMPLE IMHO. You can see it in pr60640-4.C.082i.materialize-all-clones: {anonymous}::B::_ZThn16_N12_GLOBAL__N_11B3fooEi (struct BD.2510 * const thisD.2622) { struct BD.2510 * const adjusted_this.16D.2748; <bb 2> [local count: 10000]: this_2 = this_1(D) + 18446744073709551600; adjusted_this.16_3 = this_2; {anonymous}::B::*.LTHUNK0 (adjusted_this.16_3); [tail call] return; } and {anonymous}::B::_ZThn16_N12_GLOBAL__N_11B3fooEi.artificial_thunk.0 (struct BD.2510 * const thisD.2622) { struct BD.2510 * const adjusted_this.15D.2745; <bb 2> [local count: 10000]: this_2 = this_1(D) + 18446744073709551600; adjusted_this.15_3 = this_2; {anonymous}::B::foo.constprop (adjusted_this.15_3); [tail call] return; } note the same UID for the this PARM_DECL.