Hi, On Mon, Aug 19, 2013 at 04:01:16PM +0200, Jan Hubicka wrote:
[...] > > * Makefile.in (ipa-devirt.o): Add dependency on diagnostic.h > * ipa-devirt.c: Include diganostic.h > (odr_type_d): Add types and types_set. > (hash_type_name): Work for types with vtables during LTO. > (odr_hasher::remove): Fix comment; destroy types_set. > (add_type_duplicate): New function, > (get_odr_type): Use it. > (dump_type_inheritance_graph): Dump type duplicates. > * ipa.c (symtab_remove_unreachable_nodes): Build type inheritance > graph. > * tree.c (types_same_for_odr): Give exact answers on types with > virtual tables. [...] > Index: ipa-devirt.c > =================================================================== > *** ipa-devirt.c (revision 201836) > --- ipa-devirt.c (working copy) > *************** static odr_hash_type odr_hash; > *** 222,227 **** > --- 251,382 ---- > static GTY(()) vec <odr_type, va_gc> *odr_types_ptr; > #define odr_types (*odr_types_ptr) > > + /* TYPE is equivalent to VAL by ODR, but its tree representation differs > + from VAL->type. This may happen in LTO where tree merging did not merge > + all variants of the same type. It may or may not mean the ODR violation. > + Add it to the list of duplicates and warn on some violations. */ > + > + void > + add_type_duplicate (odr_type val, tree type) > + { It seems the function can be made static. If not, it should probably have a name that would be less prone to clashes. Thanks, Martin