> > Index: gcc/ipa-pure-const.c > > =================================================================== > > --- gcc/ipa-pure-const.c (revision 215888) > > +++ gcc/ipa-pure-const.c (working copy) > > @@ -744,6 +744,8 @@ analyze_function (struct cgraph_node *fn, bool ipa > > { > > /* Thunk gets propagated through, so nothing interesting happens. */ > > gcc_assert (ipa); > > + if (fn->thunk.virtual_offset_p) > > + l->pure_const_state = IPA_NEITHER; > > return l; > > } > > > > Hmm, I looked again at the above if statement, and I think now it should > better be "if (fn->thunk.thunk_p && fn->thunk.virtual_offset_p)", because > thunk.virtual_offset_p is probably not well defined if we come here because > of fn->alias == true.
Yes, that is right. I plan to put the other thunk info off the structure anyway. > > > This makes the lattice to be initialized correctly, but you also need the > > function_symbol calls that will skip thunks replaced by > > something like function_or_non_virtual_thunk_symbol. > > > > Oh, I see what you mean, thanks. > > I created a new method function_or_virtual_thunk_symbol() for this. > And simplified the algorithm of both function_symbol variants a bit. > > Attached, you'll find my updated patch for review. > > Boot-strapped and regression tested on x86_64-linux-gnu. > OK for trunk? > > > Thanks > Bernd. > > > Can you, please, send the updated patch? > > Sorry for late review, > > Honza > > > > > 2014-11-25 Bernd Edlinger <bernd.edlin...@hotmail.de> > > PR ipa/61190 > * cgraph.h (symtab_node::call_for_symbol_and_aliases): Fix comment. > (cgraph_node::function_or_virtual_thunk_symbol): New function. > (cgraph_node::call_for_symbol_and_aliases): Fix comment. > (cgraph_node::call_for_symbol_thunks_and_aliases): Adjust comment. > Add new optional parameter exclude_virtual_thunks. > * cgraph.c (cgraph_node::call_for_symbol_thunks_and_aliases): Add new > optional parameter exclude_virtual_thunks. > (cgraph_node::set_const_flag): Don't propagate to virtual thunks. > (cgraph_node::set_pure_flag): Likewise. > (cgraph_node::function_symbol): Simplified. > (cgraph_node::function_or_virtual_thunk_symbol): New function. > * ipa-pure-const.c (analyze_function): For virtual thunks set > pure_const_state to IPA_NEITHER. > (propagate_pure_const): Use function_or_virtual_thunk_symbol. OK, Honza > > testsuite/ChangeLog: > 2014-11-25 Bernd Edlinger <bernd.edlin...@hotmail.de> > > PR ipa/61190 > * g++.old-deja/g++.mike/p4736b.C: Use -O2. >