Hi, the new symtab verifier introduced by me two days ago fires during bootstrap on AIX (and probably some other platforms not having COMDAT group support). The problem is that same_comdat_group list is set for symbols that are not COMDAT. This happens on variables only, but not for functions.
C++ frontend handles same comdat group lists for both functions and variables. For functions we already sanity check that only DECL_ONE_ONLY functions are inserted, we have verifier for that and we skip initializing the list when varasm didn't drop the DECL_ONE_ONLY flag (because target is not supporting it). This is not the case for variables, where the corresponding code tests DECL_COMDAT. This previously latent problem leads to missed optimization and confussion down in the callgraph/varpool code that assume that only comdat group lists are initialized only when target has support for them. David has tested the following patch AIX and I've bootstrapped/regtested it on x86_64-linux and commited. Honza Index: ChangeLog =================================================================== *** ChangeLog (revision 186626) --- ChangeLog (working copy) *************** *** 1,3 **** --- 1,9 ---- + 2012-04-20 Jan Hubicka <j...@suse.cz> + + PR target/53042 + * decl2.c (maybe_emit_vtables): Do not initialize same_comdat_group + list when target has no support for it. + 2012-04-20 Michael Matz <m...@suse.de> * error.c (pedwarn_cxx98): Move va_end call after user Index: decl2.c =================================================================== *** decl2.c (revision 186623) --- decl2.c (working copy) *************** maybe_emit_vtables (tree ctype) *** 1894,1900 **** actually marking the variable as written. */ if (flag_syntax_only) TREE_ASM_WRITTEN (vtbl) = 1; ! else if (DECL_COMDAT (vtbl)) { current = varpool_node (vtbl); if (last) --- 1894,1900 ---- actually marking the variable as written. */ if (flag_syntax_only) TREE_ASM_WRITTEN (vtbl) = 1; ! else if (DECL_ONE_ONLY (vtbl)) { current = varpool_node (vtbl); if (last)