Hi, 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? Martin