ipa.c (cgraph_externally_visible_p, [...]): Local comdats are not externally visible.

* 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
This commit is contained in:
Jan Hubicka 2013-06-13 12:00:04 +02:00 committed by Jan Hubicka
parent a8355e5178
commit e5b962d0cc
3 changed files with 21 additions and 4 deletions

View 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

View File

@ -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. */

View 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)
{