aboutsummaryrefslogtreecommitdiff
path: root/gcc/cfgrtl.c
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2011-03-23 11:35:59 -0600
committerJeff Law <law@gcc.gnu.org>2011-03-23 11:35:59 -0600
commit0c617be487cd7b2d7597330a52ff3a020dc11076 (patch)
tree63167faa52777ebde1ca5984d9076b69601f109d /gcc/cfgrtl.c
parent58da96fef9d3d98154968670f1b15dc5b8e116d9 (diff)
downloadgcc-0c617be487cd7b2d7597330a52ff3a020dc11076.zip
gcc-0c617be487cd7b2d7597330a52ff3a020dc11076.tar.gz
gcc-0c617be487cd7b2d7597330a52ff3a020dc11076.tar.bz2
cfg.c (redirect_edge_succ_nodup): Duplicate the varm map before removing the edge.
* cfg.c (redirect_edge_succ_nodup): Duplicate the varm map before removing the edge. * cfgrtl.c (cfg_layout_redirect_edge_and_branch): Do not use E after it may have been freed by redirect_branch_edge or redirect_edge_succ_nodup. From-SVN: r171356
Diffstat (limited to 'gcc/cfgrtl.c')
-rw-r--r--gcc/cfgrtl.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index 5d64f3a..e78f5ba 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -2537,9 +2537,9 @@ cfg_layout_redirect_edge_and_branch (edge e, basic_block dest)
e->flags &= ~EDGE_FALLTHRU;
redirected = redirect_branch_edge (e, dest);
gcc_assert (redirected);
- e->flags |= EDGE_FALLTHRU;
- df_set_bb_dirty (e->src);
- return e;
+ redirected->flags |= EDGE_FALLTHRU;
+ df_set_bb_dirty (redirected->src);
+ return redirected;
}
/* In case we are redirecting fallthru edge to the branch edge
of conditional jump, remove it. */
@@ -2553,10 +2553,10 @@ cfg_layout_redirect_edge_and_branch (edge e, basic_block dest)
&& onlyjump_p (BB_END (src)))
delete_insn (BB_END (src));
}
- ret = redirect_edge_succ_nodup (e, dest);
if (dump_file)
fprintf (dump_file, "Fallthru edge %i->%i redirected to %i\n",
e->src->index, e->dest->index, dest->index);
+ ret = redirect_edge_succ_nodup (e, dest);
}
else
ret = redirect_branch_edge (e, dest);