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.

Reply via email to