diff options
author | Jeff Law <law@redhat.com> | 2011-03-23 11:35:59 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2011-03-23 11:35:59 -0600 |
commit | 0c617be487cd7b2d7597330a52ff3a020dc11076 (patch) | |
tree | 63167faa52777ebde1ca5984d9076b69601f109d /gcc/cfgrtl.c | |
parent | 58da96fef9d3d98154968670f1b15dc5b8e116d9 (diff) | |
download | gcc-0c617be487cd7b2d7597330a52ff3a020dc11076.tar.gz |
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.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index 5d64f3af019..e78f5baf6ba 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); |