diff options
author | Richard Henderson <rth@redhat.com> | 2004-09-12 10:22:03 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-09-12 10:22:03 -0700 |
commit | f6a41d17646f19146749442cced240b927f88b8b (patch) | |
tree | 7fbe3e0f7976ee06071314aa3a4f0e6be24c17c5 /gcc/except.c | |
parent | bdd1aed4e1daf301088d973c35312338ee48fffd (diff) | |
download | gcc-f6a41d17646f19146749442cced240b927f88b8b.zip gcc-f6a41d17646f19146749442cced240b927f88b8b.tar.gz gcc-f6a41d17646f19146749442cced240b927f88b8b.tar.bz2 |
PR 17186, part deux
PR 17186, part deux
* except.c (sjlj_emit_function_exit): Fix logic locating
sjlj_exit_after in final block.
From-SVN: r87394
Diffstat (limited to 'gcc/except.c')
-rw-r--r-- | gcc/except.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/gcc/except.c b/gcc/except.c index 9e3c06d..50eda2a 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -2042,18 +2042,19 @@ sjlj_emit_function_exit (void) is inside the last basic block or after it. In the other case we need to emit to edge. */ gcc_assert (e->src->next_bb == EXIT_BLOCK_PTR); - for (insn = NEXT_INSN (BB_END (e->src)); insn; insn = NEXT_INSN (insn)) - if (insn == cfun->eh->sjlj_exit_after) - break; - if (insn) - insert_insn_on_edge (seq, e); - else + for (insn = BB_HEAD (e->src); ; insn = NEXT_INSN (insn)) { - insn = cfun->eh->sjlj_exit_after; - if (LABEL_P (insn)) - insn = NEXT_INSN (insn); - emit_insn_after (seq, insn); + if (insn == cfun->eh->sjlj_exit_after) + { + if (LABEL_P (insn)) + insn = NEXT_INSN (insn); + emit_insn_after (seq, insn); + return; + } + if (insn == BB_END (e->src)) + break; } + insert_insn_on_edge (seq, e); } } |