https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85549
--- Comment #5 from Martin Liška <marxin at gcc dot gnu.org> --- (In reply to Martin Jambor from comment #4) > This is another stupid omission, I forgot that for by-reference aggregate > values, one has to check the agg_preserved of the jump function. > > diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c > index 1b8f335fd32..4f28a55b862 100644 > --- a/gcc/ipa-cp.c > +++ b/gcc/ipa-cp.c > @@ -4372,7 +4372,9 @@ find_aggregate_values_for_callers_subset (struct > cgraph_node *node, > { > struct ipa_jump_func *jfunc > = ipa_get_ith_jump_func (IPA_EDGE_REF (cs), i); > - if (self_recursive_pass_through_p (cs, jfunc, i)) > + if (self_recursive_pass_through_p (cs, jfunc, i) > + && (!plats->aggs_by_ref > + || ipa_get_jf_pass_through_agg_preserved (jfunc))) > continue; > inter = intersect_aggregates_with_edge (cs, i, inter); I can confirm the patch fixes test-suite of the package.