aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2009-11-12 17:21:59 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2009-11-12 16:21:59 +0000
commita82892595bc3b2a84b13455711a609138dbcb052 (patch)
treefc25b09495438c43fe8c72dd5a37344a2338dc1a /gcc/ipa.c
parent06bd7f563b5358d34b592e9d630ad770c3ec15c2 (diff)
downloadgcc-a82892595bc3b2a84b13455711a609138dbcb052.zip
gcc-a82892595bc3b2a84b13455711a609138dbcb052.tar.gz
gcc-a82892595bc3b2a84b13455711a609138dbcb052.tar.bz2
cgraph.h (varpool_node_name): Declare.
* cgraph.h (varpool_node_name): Declare. * cgraphunit.c (process_function_and_variable_attributes): Set force_output flag on used variables. * ipa.c (function_and_variable_visibility): Dump externally visible and needed variables. * varpool.c (varpool_node_name): Export. (decide_is_variable_needed): Check COMDAT for externally visible vars; ignore needed flag. From-SVN: r154121
Diffstat (limited to 'gcc/ipa.c')
-rw-r--r--gcc/ipa.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/gcc/ipa.c b/gcc/ipa.c
index 4297ea2..bf8faa9 100644
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -292,7 +292,8 @@ function_and_variable_visibility (bool whole_program)
for (node = cgraph_nodes; node; node = node->next)
{
- gcc_assert (!DECL_WEAK (node->decl) || TREE_PUBLIC (node->decl) || DECL_EXTERNAL (node->decl));
+ gcc_assert ((!DECL_WEAK (node->decl) && !DECL_COMDAT (node->decl))
+ || TREE_PUBLIC (node->decl) || DECL_EXTERNAL (node->decl));
if (cgraph_externally_visible_p (node, whole_program))
{
gcc_assert (!node->global.inlined_to);
@@ -317,7 +318,7 @@ function_and_variable_visibility (bool whole_program)
{
if (!vnode->finalized)
continue;
- gcc_assert ((!DECL_WEAK (vnode->decl) || DECL_COMMON (vnode->decl))
+ gcc_assert ((!DECL_WEAK (vnode->decl) && !DECL_COMMON (vnode->decl) && !DECL_COMDAT (vnode->decl))
|| TREE_PUBLIC (vnode->decl) || DECL_EXTERNAL (node->decl));
if (vnode->needed
&& (DECL_COMDAT (vnode->decl) || TREE_PUBLIC (vnode->decl))
@@ -352,6 +353,11 @@ function_and_variable_visibility (bool whole_program)
if (node->local.externally_visible)
fprintf (dump_file, " %s", cgraph_node_name (node));
fprintf (dump_file, "\n\n");
+ fprintf (dump_file, "\nMarking externally visible variables:");
+ for (vnode = varpool_nodes_queue; vnode; vnode = vnode->next_needed)
+ if (vnode->externally_visible)
+ fprintf (dump_file, " %s", varpool_node_name (vnode));
+ fprintf (dump_file, "\n\n");
}
cgraph_function_flags_ready = true;
return 0;
@@ -410,6 +416,14 @@ whole_program_function_and_variable_visibility (void)
for (vnode = varpool_nodes_queue; vnode; vnode = vnode->next_needed)
if (vnode->externally_visible && !DECL_COMDAT (vnode->decl))
varpool_mark_needed_node (vnode);
+ if (dump_file)
+ {
+ fprintf (dump_file, "\nNeeded variables:");
+ for (vnode = varpool_nodes_queue; vnode; vnode = vnode->next_needed)
+ if (vnode->needed)
+ fprintf (dump_file, " %s", varpool_node_name (vnode));
+ fprintf (dump_file, "\n\n");
+ }
return 0;
}