From patchwork Sun Jul 11 08:19:23 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: better error message for multiple prevailing defs From: Andi Kleen X-Patchwork-Id: 58512 Message-Id: <20100711081923.GA7694@basil.fritz.box> To: gcc-patches@gcc.gnu.org Date: Sun, 11 Jul 2010 10:19:23 +0200 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 * 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)); + } /* If there's not a prevailing symbol yet it's an external reference. Happens a lot during ltrans. Choose the first symbol with a