On Sun, Feb 10, 2019 at 11:07 PM Jan Hubicka <hubi...@ucw.cz> wrote: > > Hi, > I am attaching correct patch. > The option is new only in a relative sense - it was added 5 years ago > with the orinal ODR warning infrastructure. > We have -Wodr-type-merging that controls streming data needed for -Wodr > to work and -fno-devirtualize that controls streaming of BINFOs. > > I was concerned at that time about extra overhead this streaming causes, > but with all the optimizations this overhead is quite small now (i.e. > the mangled type names and there are "only" about 4k types in Firefox) > > What is anoying about -Wno-odr-type-merging is that we lose mangled > names that are also used by devirtualization. ipa-devirt still has two > implementations of the main hash - one based on mangled names and the > original one based on virtual table names, but combining both hashes > results in incomplete type inheritance graphs.
Ah, I see. I guess we can clean this up for GCC 10 then. Richard. > Honza > > > PR lto/89272 > * tree.c (fld_simplified_type_name): Also keep TYPE_DECL for > polymorphic types. > > > --- trunk/gcc/tree.c 2019/02/10 09:45:55 268741 > +++ trunk/gcc/tree.c 2019/02/10 10:46:43 268742 > @@ -5153,7 +5153,10 @@ > TYPE_DECL if the type doesn't have linkage. > this must match fld_ */ > if (type != TYPE_MAIN_VARIANT (type) > - || !DECL_ASSEMBLER_NAME_SET_P (TYPE_NAME (type))) > + || (!DECL_ASSEMBLER_NAME_SET_P (TYPE_NAME (type)) > + && (TREE_CODE (type) != RECORD_TYPE > + || !TYPE_BINFO (type) > + || !BINFO_VTABLE (TYPE_BINFO (type))))) > return DECL_NAME (TYPE_NAME (type)); > return TYPE_NAME (type); > } >