aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2010-05-11 08:19:28 +0000
committerJan Hubicka <jh@suse.cz>2010-05-11 08:19:28 +0000
commitbb5a3134d699eb2ed5af21c874310c40008efc18 (patch)
treec34e2e1d2cee5e8fa65450b7768d6f6b4fb0a48a
parent49b8fc04e45649fc4556b656c2d45983a0f49d4c (diff)
* cgraph.c (cgraph_mark_reachable_node): Accept references to optimized
out extern inlines. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@159260 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/cgraph.c11
2 files changed, 11 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3abdc3f5b3b..0e02b6c127c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,8 +1,8 @@
2010-05-11 Jan Hubicka <jh@suse.cz>
* cgraphbuild.c (cgraph_rebuild_references): New.
- (cgraph_mark_reachable_node): Accept references to optimized out
- extern inlines.
+ * cgraph.c (cgraph_mark_reachable_node): Accept references to optimized
+ out extern inlines.
* cgraph.h (cgraph_rebuild_references): Declare.
* tree-inline.c (tree_function_versioning): Use it.
* ipa-struct-reorg.c (do_reorg_for_func): Likewise.
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index 5f609aaf434..a6aed42517a 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -1643,9 +1643,16 @@ cgraph_mark_reachable_node (struct cgraph_node *node)
{
if (!node->reachable && node->local.finalized)
{
- notice_global_symbol (node->decl);
+ if (cgraph_global_info_ready)
+ {
+ /* Verify that function does not appear to be needed out of blue
+ during the optimization process. This can happen for extern
+ inlines when bodies was removed after inlining. */
+ gcc_assert ((node->analyzed || DECL_EXTERNAL (node->decl)));
+ }
+ else
+ notice_global_symbol (node->decl);
node->reachable = 1;
- gcc_assert (!cgraph_global_info_ready);
node->next_needed = cgraph_nodes_queue;
cgraph_nodes_queue = node;