aboutsummaryrefslogtreecommitdiff
path: root/gcc/cgraph.c
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2013-09-05 14:41:16 +0200
committerMartin Jambor <jamborm@gcc.gnu.org>2013-09-05 14:41:16 +0200
commit568cda29c5a4ffb086d8308745ae8b86427dab61 (patch)
tree90881c22dd3aedd23f522f30c644b2f07bc9ddb2 /gcc/cgraph.c
parent5a200acb0519af47612f0e92c86c07ec69a6ae81 (diff)
downloadgcc-568cda29c5a4ffb086d8308745ae8b86427dab61.zip
gcc-568cda29c5a4ffb086d8308745ae8b86427dab61.tar.gz
gcc-568cda29c5a4ffb086d8308745ae8b86427dab61.tar.bz2
ipa-prop.c (remove_described_reference): Accept missing references, return false if that hppens, otherwise return true.
2013-09-05 Martin Jambor <mjambor@suse.cz> * ipa-prop.c (remove_described_reference): Accept missing references, return false if that hppens, otherwise return true. (cgraph_node_for_jfunc): New function. (try_decrement_rdesc_refcount): Likewise. (try_make_edge_direct_simple_call): Use them. (ipa_edge_removal_hook): Remove references from rdescs. (ipa_edge_duplication_hook): Clone rdescs and their references when the new edge has the same caller as the old one. * cgraph.c (cgraph_resolve_speculation): Remove speculative reference before removing any edges. testsuite/ * g++.dg/ipa/remref-1.C: New test. * g++.dg/ipa/remref-2.C: Likewise. From-SVN: r202281
Diffstat (limited to 'gcc/cgraph.c')
-rw-r--r--gcc/cgraph.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index 5fc87ae..f12bf1b 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -1225,13 +1225,13 @@ cgraph_resolve_speculation (struct cgraph_edge *edge, tree callee_decl)
edge->frequency = CGRAPH_FREQ_MAX;
edge->speculative = false;
e2->speculative = false;
+ ipa_remove_reference (ref);
if (e2->indirect_unknown_callee || e2->inline_failed)
cgraph_remove_edge (e2);
else
cgraph_remove_node_and_inline_clones (e2->callee, NULL);
if (edge->caller->call_site_hash)
cgraph_update_edge_in_call_site_hash (edge);
- ipa_remove_reference (ref);
return edge;
}