https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110379
Bug ID: 110379 Summary: Unnecessary copies after early opts Product: gcc Version: 13.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: hubicka at gcc dot gnu.org Target Milestone: --- Following testcase: class a { public: int b; }; void foo (class a *); class b: public a { int test(); }; int b::test() { foo (this); return 0; } produces: int b::test (struct b * const this) { struct a * _1; <bb 2> [local count: 1073741824]: _1 = &this_2(D)->D.2773; foo (_1); return 0; } I think it is equivalent to int b::test (struct b * const this) { <bb 2> [local count: 1073741824]: foo (this); return 0; } Which would save statement and confuse less ipa-sra and ipa-prop.