On Thu, Nov 14 2019, Jan Hubicka wrote:
>> On Wed, Nov 13 2019, Jan Hubicka wrote:
>> > Hi,
>> > the testcase causes inline context cache to go out of sync because I
>> > forgot to update used flags of parameters in one path of
>> > update_indirect_edges_after_inlining.
>> >
>> > While debugging it I also added better consistency check to
>> > ipa-inline-analysis and turned ipa-inline test from ifdef to -fchecking.
>> > This uncovered yet another missed upate in recursive inliner.
>> >
>> > Bootstrapped/regtested x86_64-linux, comitted.
>> >
>> >    PR c++/92421
>> >    * ipa-prop.c (update_indirect_edges_after_inlining):
>> >    Mark parameter as used.
>> >    * ipa-inline.c (recursive_inlining): Reset node cache
>> >    after inlining.
>> >    (inline_small_functions): Remove checking ifdef.
>> >    * ipa-inline-analysis.c (do_estimate_edge_time): Verify
>> >    cache consistency.
>> >    * g++.dg/torture/pr92421.C: New testcase.
>> > Index: ipa-prop.c
>> > ===================================================================
>> > --- ipa-prop.c     (revision 278151)
>> > +++ ipa-prop.c     (working copy)
>> > @@ -3537,6 +3537,11 @@ update_indirect_edges_after_inlining (st
>> >          if (ici->polymorphic
>> >              && !ipa_get_jf_ancestor_type_preserved (jfunc))
>> >            ici->vptr_changed = true;
>> > +        ipa_set_param_used_by_indirect_call (new_root_info,
>> > +                                             ici->param_index, true);
>> > +        if (ici->polymorphic)
>> > +          ipa_set_param_used_by_polymorphic_call (new_root_info,
>> > +                                                  ici->param_index, true);
>> >        }
>> 
>> 
>> 
>> Interesting, you have this exact hunk already in the patch introducing
>> the new param flags (message id
>> id:20191103224712.ndzyxu6cn3jt3...@kam.mff.cuni.cz or
>> https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00077.html).  I did
>> actually check it was there, even if only yesterday evening, but I did :-)
>> 
>> And I can also see the code already in my Monday checkout (r278047).  So
>> I guess you must have actually removed it by accident in the meantime?
>
> Well, it is there twice - once for PASS_THROUGH and here for ANCESTOR.
> But it is quite possible that I had both (since I also had verification
> at the place when originally doing the patch) and lost it on way to
> mainline.
>

Oh, I see.  That explains it then.

Thanks,

Martin

Reply via email to