Ping... see: https://gcc.gnu.org/ml/gcc-patches/2014-10/msg00536.html
> Hi Honza, > > > as you know, we have a wrong code bug, when a pure or const method is called > via a virtual thunk. > I had some more Ideas, how to fix that, but all of them had some serious > draw-backs, so I leave the details out... > > > But now I have a new insight, why the "obvious" fix for this serious code > generation bug did not work > in the first place. > > > And the reason was, that if ipa-pure-const.c calls set_const_flag or > set_pure_flag for a thunk, it calls the same > function later for the called method, and this overwrites the flags of _all_ > associated thunks and aliases. > However that should at least not be done for virtual thunks, as these need to > be IPA_NEITHER, even if > the method itself has different attributes, that is because the assembler > thunk accesses the vtable, while > other thunks do not. > > > So I re-factored set_const_flag and set_pure_flag to exclude the virtual > thunks, taking care that other > users of call_for_symbol_thunks_and_aliases do not get a different behavior > than before this patch. > > > The attached patch was boot-strapped and > regression-tested on x86_64-linux-gnu. > Ok for trunk? > > > PS: As a side-note, there are two identical functions, named > "call_for_symbol_and_aliases", in > class symtab_node and in class cgraph_node, which inherits from symtab_node. > Both functions are > not declared virtual. Is that what's intended? Usually this could lead to > errors, or at least some serious > compiler warnings. > > > Thanks > Bernd. >