Do not bail out for multiple PREVAILING_DEF_IRONLY for common symbols.
authorMartin Liska <mliska@suse.cz>
Thu, 19 Apr 2018 08:42:52 +0000 (10:42 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Thu, 19 Apr 2018 08:42:52 +0000 (08:42 +0000)
2018-04-19  Martin Liska  <mliska@suse.cz>

* lto-symtab.c (lto_symtab_resolve_symbols): Do not bail out
for multiple PREVAILING_DEF_IRONLY for common symbols.

From-SVN: r259490

gcc/lto/ChangeLog
gcc/lto/lto-symtab.c

index 3c6af8f..821a462 100644 (file)
@@ -1,3 +1,8 @@
+2018-04-19  Martin Liska  <mliska@suse.cz>
+
+       * lto-symtab.c (lto_symtab_resolve_symbols): Do not bail out
+       for multiple PREVAILING_DEF_IRONLY for common symbols.
+
 2018-04-18  Martin Liska  <mliska@suse.cz>
 
        * lto.c (lto_read_decls): Fix GNU coding style and typos.
index 2660542..3663ab7 100644 (file)
@@ -466,9 +466,14 @@ lto_symtab_resolve_symbols (symtab_node *first)
   /* If the chain is already resolved there is nothing else to do.  */
   if (prevailing)
     {
-      /* Assert it's the only one.  */
+      /* Assert it's the only one.
+        GCC should silence multiple PREVAILING_DEF_IRONLY defs error
+        on COMMON symbols since it isn't error.
+        See: https://sourceware.org/bugzilla/show_bug.cgi?id=23079.  */
       for (e = prevailing->next_sharing_asm_name; e; e = e->next_sharing_asm_name)
        if (lto_symtab_symbol_p (e)
+           && !DECL_COMMON (prevailing->decl)
+           && !DECL_COMMON (e->decl)
            && (e->resolution == LDPR_PREVAILING_DEF_IRONLY
                || e->resolution == LDPR_PREVAILING_DEF_IRONLY_EXP
                || e->resolution == LDPR_PREVAILING_DEF))