diff options
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/ipa.c | 7 | ||||
-rw-r--r-- | gcc/symtab.c | 11 |
3 files changed, 21 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 587c9b1..c374686 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 @@ -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. */ diff --git a/gcc/symtab.c b/gcc/symtab.c index c9f32d5..85d47a8 100644 --- a/gcc/symtab.c +++ b/gcc/symtab.c @@ -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) { |