Message ID | 20100711081923.GA7694@basil.fritz.box |
---|---|
State | New |
Headers | show |
On Sun, Jul 11, 2010 at 10:19 AM, Andi Kleen <andi@firstfloor.org> wrote: > I have some trouble with the linker providing multiple prevailing > definitions for a single LTO symbol. Right now it's difficult > to find out which symbol this even is, can be only done with the > debugger. Fix the error message to print out the symbol. > > I have no svn account, so someone would need to commit it for me. > > -Andi > > 2010-07-11 Andi Kleen <ak@linux.intel.com> > > * lto-symtab.c (lto_symtab_merge_decls_1): Use internal_error > instead of gcc_assert to print better error message for multiple > prevailing defs. > > diff --git a/gcc/lto-symtab.c b/gcc/lto-symtab.c > index d101449..c907723 100644 > --- a/gcc/lto-symtab.c > +++ b/gcc/lto-symtab.c > @@ -648,9 +648,13 @@ lto_symtab_merge_decls_1 (void **slot, void *data ATTRIBUTE_UNUSED) > > /* Assert it's the only one. */ > if (prevailing) > - for (e = prevailing->next; e; e = e->next) > - gcc_assert (e->resolution != LDPR_PREVAILING_DEF_IRONLY > - && e->resolution != LDPR_PREVAILING_DEF); > + for (e = prevailing->next; e; e = e->next) > + { > + if (e->resolution != LDPR_PREVAILING_DEF_IRONLY > + && e->resolution != LDPR_PREVAILING_DEF) > + internal_error ("multiple prevailing defs for %qE", > + DECL_NAME (prevailing->decl)); I'd say using fatal_error () here is more appropriate. Richard. > + } > > /* If there's not a prevailing symbol yet it's an external reference. > Happens a lot during ltrans. Choose the first symbol with a >
diff --git a/gcc/lto-symtab.c b/gcc/lto-symtab.c index d101449..c907723 100644 --- a/gcc/lto-symtab.c +++ b/gcc/lto-symtab.c @@ -648,9 +648,13 @@ lto_symtab_merge_decls_1 (void **slot, void *data ATTRIBUTE_UNUSED) /* Assert it's the only one. */ if (prevailing) - for (e = prevailing->next; e; e = e->next) - gcc_assert (e->resolution != LDPR_PREVAILING_DEF_IRONLY - && e->resolution != LDPR_PREVAILING_DEF); + for (e = prevailing->next; e; e = e->next) + { + if (e->resolution != LDPR_PREVAILING_DEF_IRONLY + && e->resolution != LDPR_PREVAILING_DEF) + internal_error ("multiple prevailing defs for %qE", + DECL_NAME (prevailing->decl)); + } /* If there's not a prevailing symbol yet it's an external reference. Happens a lot during ltrans. Choose the first symbol with a