aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa-prop.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2008-09-09 21:19:41 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2008-09-09 21:19:41 +0200
commite56f5f3e5aad70d12c6ea019c99028a4daf5dc2b (patch)
treeca835f110fff1af809098b873bed9ffc70011b18 /gcc/ipa-prop.c
parent71aaa2ff33c3699b3feafc9b409f83bf8b52213c (diff)
downloadgcc-e56f5f3e5aad70d12c6ea019c99028a4daf5dc2b.zip
gcc-e56f5f3e5aad70d12c6ea019c99028a4daf5dc2b.tar.gz
gcc-e56f5f3e5aad70d12c6ea019c99028a4daf5dc2b.tar.bz2
re PR other/37419 (mpfr related memory corruption)
PR other/37419 * ipa-prop.h (ipa_propagate_indirect_call_infos): Change last argument to pointer to vector pointer. * ipa-prop.c (ipa_propagate_indirect_call_infos, propagate_info_to_inlined_callees): Likewise. (update_call_notes_after_inlining): Likewise. Push new indirect edge to *new_edges instead of new_edges. Reread IPA_EDGE_REF after ipa_check_create_edge_args. * ipa-inline.c (cgraph_decide_recursive_inlining): Change last argument to pointer to vector pointer. (cgraph_decide_inlining_of_small_function): Adjust cgraph_decide_recursive_inlining and ipa_propagate_indirect_call_infos calls. From-SVN: r140168
Diffstat (limited to 'gcc/ipa-prop.c')
-rw-r--r--gcc/ipa-prop.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
index ffbf3ad..f8b7343 100644
--- a/gcc/ipa-prop.c
+++ b/gcc/ipa-prop.c
@@ -890,12 +890,12 @@ print_edge_addition_message (FILE *f, struct ipa_param_call_note *nt,
/* Update the param called notes associated with NODE when CS is being inlined,
assuming NODE is (potentially indirectly) inlined into CS->callee.
Moreover, if the callee is discovered to be constant, create a new cgraph
- edge for it. Newly discovered indirect edges will be added to NEW_EDGES,
- unless it is NULL. */
+ edge for it. Newly discovered indirect edges will be added to *NEW_EDGES,
+ unless NEW_EDGES is NULL. */
static void
update_call_notes_after_inlining (struct cgraph_edge *cs,
struct cgraph_node *node,
- VEC (cgraph_edge_p, heap) *new_edges)
+ VEC (cgraph_edge_p, heap) **new_edges)
{
struct ipa_node_params *info = IPA_NODE_REF (node);
struct ipa_edge_args *top = IPA_EDGE_REF (cs);
@@ -949,7 +949,8 @@ update_call_notes_after_inlining (struct cgraph_edge *cs,
new_indirect_edge->indirect_call = 1;
ipa_check_create_edge_args ();
if (new_edges)
- VEC_safe_push (cgraph_edge_p, heap, new_edges, new_indirect_edge);
+ VEC_safe_push (cgraph_edge_p, heap, *new_edges, new_indirect_edge);
+ top = IPA_EDGE_REF (cs);
}
}
}
@@ -959,11 +960,11 @@ update_call_notes_after_inlining (struct cgraph_edge *cs,
update_call_notes_after_inlining on all nodes and
update_jump_functions_after_inlining on all non-inlined edges that lead out
of this subtree. Newly discovered indirect edges will be added to
- NEW_EDGES, unless it is NULL. */
+ *NEW_EDGES, unless NEW_EDGES is NULL. */
static void
propagate_info_to_inlined_callees (struct cgraph_edge *cs,
struct cgraph_node *node,
- VEC (cgraph_edge_p, heap) *new_edges)
+ VEC (cgraph_edge_p, heap) **new_edges)
{
struct cgraph_edge *e;
@@ -979,10 +980,10 @@ propagate_info_to_inlined_callees (struct cgraph_edge *cs,
/* Update jump functions and call note functions on inlining the call site CS.
CS is expected to lead to a node already cloned by
cgraph_clone_inline_nodes. Newly discovered indirect edges will be added to
- NEW_EDGES, unless it is NULL. */
+ *NEW_EDGES, unless NEW_EDGES is NULL. */
void
ipa_propagate_indirect_call_infos (struct cgraph_edge *cs,
- VEC (cgraph_edge_p, heap) *new_edges)
+ VEC (cgraph_edge_p, heap) **new_edges)
{
propagate_info_to_inlined_callees (cs, cs->callee, new_edges);
}