OSDN Git Service

* lto.c (partition_cgraph_node_p, partition_varpool_node_p): Handle
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 6 Oct 2010 17:28:13 +0000 (17:28 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 6 Oct 2010 17:28:13 +0000 (17:28 +0000)
COMDATs required by the linker.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@165058 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/lto/ChangeLog
gcc/lto/lto.c

index a3f2fd8..0057fe3 100644 (file)
@@ -1,3 +1,8 @@
+2010-10-06  Jan Hubicka  <jh@suse.cz>
+
+       * lto.c (partition_cgraph_node_p, partition_varpool_node_p): Handle
+       COMDATs required by the linker.
+
 2010-10-05  Ian Lance Taylor  <iant@google.com>
 
        * lto.c (lto_section_with_id): Make s a const pointer.
index 323b09a..ab90e85 100644 (file)
@@ -839,7 +839,8 @@ partition_cgraph_node_p (struct cgraph_node *node)
     return false;
   /* Extern inlines and comdat are always only in partitions they are needed.  */
   if (DECL_EXTERNAL (node->decl)
-      || DECL_COMDAT (node->decl))
+      || (DECL_COMDAT (node->decl)
+         && !cgraph_used_from_object_file_p (node)))
     return false;
   return true;
 }
@@ -854,7 +855,8 @@ partition_varpool_node_p (struct varpool_node *vnode)
     return false;
   /* Constant pool and comdat are always only in partitions they are needed.  */
   if (DECL_IN_CONSTANT_POOL (vnode->decl)
-      || DECL_COMDAT (vnode->decl))
+      || (DECL_COMDAT (vnode->decl)
+         && !varpool_used_from_object_file_p (vnode)))
     return false;
   return true;
 }