diff options
author | Jan Hubicka <jh@suse.cz> | 2009-11-12 17:21:59 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2009-11-12 16:21:59 +0000 |
commit | a82892595bc3b2a84b13455711a609138dbcb052 (patch) | |
tree | fc25b09495438c43fe8c72dd5a37344a2338dc1a /gcc/ipa.c | |
parent | 06bd7f563b5358d34b592e9d630ad770c3ec15c2 (diff) | |
download | gcc-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.c | 18 |
1 files changed, 16 insertions, 2 deletions
@@ -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; } |