lto-symtab.c (lto_symtab_resolve_symbols): Remove hack handling comdats for broken...
authorJan Hubicka <jh@suse.cz>
Thu, 15 Jul 2010 16:01:33 +0000 (18:01 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 15 Jul 2010 16:01:33 +0000 (16:01 +0000)
* lto-symtab.c (lto_symtab_resolve_symbols): Remove hack handling comdats
for broken gold.
(lto_sy mtab_merge_decls_1): Set used_from_object_file correctly.

From-SVN: r162225

gcc/ChangeLog
gcc/lto-symtab.c

index f9fbfd8..2e80e69 100644 (file)
@@ -1,3 +1,9 @@
+2010-07-15  Jan Hubicka  <jh@suse.cz>
+
+       * lto-symtab.c (lto_symtab_resolve_symbols): Remove hack handling comdats
+       for broken gold.
+       (lto_sy mtab_merge_decls_1): Set used_from_object_file correctly. 
+
 2010-07-15  Nathan Froyd  <froydnj@codesourcery.com>
 
        * tree.h (TREE_RTL_OPERAND_CHECK): Delete.
index 7d42350..978bccb 100644 (file)
@@ -494,13 +494,7 @@ lto_symtab_resolve_symbols (void **slot)
       if (TREE_CODE (e->decl) == FUNCTION_DECL)
        e->node = cgraph_get_node_or_alias (e->decl);
       else if (TREE_CODE (e->decl) == VAR_DECL)
-       {
-         e->vnode = varpool_get_node (e->decl);
-         /* The LTO plugin for gold doesn't handle common symbols
-            properly.  Let us choose manually.  */
-         if (DECL_COMMON (e->decl))
-           e->resolution = LDPR_UNKNOWN;
-       }
+       e->vnode = varpool_get_node (e->decl);
     }
 
   e = (lto_symtab_entry_t) *slot;
@@ -742,23 +736,26 @@ lto_symtab_merge_decls_1 (void **slot, void *data ATTRIBUTE_UNUSED)
       && TREE_CODE (prevailing->decl) != VAR_DECL)
     prevailing->next = NULL;
 
-  /* Set externally_visible flags for declaration of LDPR_PREVAILING_DEF */
-  if (flag_whole_program)
+  /* Set used_from_object_file flags.  */
+  if (prevailing->resolution == LDPR_PREVAILING_DEF
+      || prevailing->resolution == LDPR_PREEMPTED_REG
+      || prevailing->resolution == LDPR_RESOLVED_EXEC
+      || prevailing->resolution == LDPR_RESOLVED_DYN)
     {
-      if (prevailing->resolution == LDPR_PREVAILING_DEF)
-        {
-          if (TREE_CODE (prevailing->decl) == FUNCTION_DECL)
-            prevailing->node->local.used_from_object_file = true;
-          else
-            prevailing->vnode->used_from_object_file = true;
-        }
-      else if (prevailing->resolution == LDPR_PREVAILING_DEF_IRONLY)
-        {
-          if (TREE_CODE (prevailing->decl) == FUNCTION_DECL)
-            prevailing->node->local.used_from_object_file = false;
-          else
-            prevailing->vnode->used_from_object_file = false;
-        }
+      if (TREE_CODE (prevailing->decl) == FUNCTION_DECL)
+       {
+         if (prevailing->node->same_body_alias)
+           prevailing->node->same_body->local.used_from_object_file = true;
+         else
+           prevailing->node->local.used_from_object_file = true;
+       }
+      else
+       {
+         if (prevailing->vnode->alias)
+           prevailing->vnode->extra_name->used_from_object_file = true;
+         else
+           prevailing->vnode->used_from_object_file = true;
+       }
     }
   return 1;
 }