ipa.c (cgraph_externally_visible_p, [...]): Local comdats are not externally visible.
authorJan Hubicka <jh@suse.cz>
Thu, 13 Jun 2013 10:00:04 +0000 (12:00 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 13 Jun 2013 10:00:04 +0000 (10:00 +0000)
* ipa.c (cgraph_externally_visible_p, varpool_externally_visible_p):
Local comdats are not externally visible.
* symtab.c (dump_symtab_base): Dump externally visible.
(verify_symtab_base): Verify back links in the symtab hash.

From-SVN: r200064

gcc/ChangeLog
gcc/ipa.c
gcc/symtab.c

index 587c9b1e479254fa2ec1759a462bd99cc75ea64e..c37468695f51ca1d5883313217f4a53b7e6a595a 100644 (file)
@@ -1,3 +1,10 @@
+2013-06-13  Jan Hubicka  <jh@suse.cz>
+
+       * ipa.c (cgraph_externally_visible_p, varpool_externally_visible_p):
+       Local comdats are not externally visible.
+       * symtab.c (dump_symtab_base): Dump externally visible.
+       (verify_symtab_base): Verify back links in the symtab hash.
+
 2013-06-13  Bin Cheng  <bin.cheng@arm.com>
 
        * fold-const.c (operand_equal_p): Consider NOP_EXPR and
index 98a7b07841690dc803b58078fc8fdcb74f7a58e9..0f2a5c8b424d0f9594d8b520c33b5b25c6b347de 100644 (file)
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -606,9 +606,8 @@ cgraph_externally_visible_p (struct cgraph_node *node,
 {
   if (!node->symbol.definition)
     return false;
-  if (!DECL_COMDAT (node->symbol.decl)
-      && (!TREE_PUBLIC (node->symbol.decl)
-         || DECL_EXTERNAL (node->symbol.decl)))
+  if (!TREE_PUBLIC (node->symbol.decl)
+      || DECL_EXTERNAL (node->symbol.decl))
     return false;
 
   /* Do not try to localize built-in functions yet.  One of problems is that we
@@ -667,7 +666,7 @@ varpool_externally_visible_p (struct varpool_node *vnode)
   if (DECL_EXTERNAL (vnode->symbol.decl))
     return true;
 
-  if (!DECL_COMDAT (vnode->symbol.decl) && !TREE_PUBLIC (vnode->symbol.decl))
+  if (!TREE_PUBLIC (vnode->symbol.decl))
     return false;
 
   /* If linker counts on us, we must preserve the function.  */
index c9f32d5635126053fbf6fc4d98049f2ff718da35..85d47a81a1fa5c2ebedcb062d53c3eab11eda548 100644 (file)
@@ -508,6 +508,8 @@ dump_symtab_base (FILE *f, symtab_node node)
     fprintf (f, " force_output");
   if (node->symbol.forced_by_abi)
     fprintf (f, " forced_by_abi");
+  if (node->symbol.externally_visible)
+    fprintf (f, " externally_visible");
   if (node->symbol.resolution != LDPR_UNKNOWN)
     fprintf (f, " %s",
             ld_plugin_symbol_resolution_names[(int)node->symbol.resolution]);
@@ -655,6 +657,15 @@ verify_symtab_base (symtab_node node)
          error ("node not found in symtab decl hashtable");
          error_found = true;
        }
+      if (hashed_node != node
+         && (!is_a <cgraph_node> (node)
+             || !dyn_cast <cgraph_node> (node)->clone_of
+             || dyn_cast <cgraph_node> (node)->clone_of->symbol.decl
+                != node->symbol.decl))
+       {
+         error ("node differs from symtab decl hashtable");
+         error_found = true;
+       }
     }
   if (assembler_name_hash)
     {