Commit 7f206d8f by Richard Henderson Committed by Richard Henderson

except.c (reachable_handlers): Handle a region being removed out from under a RESX.

        * except.c (reachable_handlers): Handle a region being removed
        out from under a RESX.

From-SVN: r44363
parent 2c938d42
2001-07-25 Richard Henderson <rth@redhat.com> 2001-07-25 Richard Henderson <rth@redhat.com>
* except.c (reachable_handlers): Handle a region being removed
out from under a RESX.
2001-07-25 Richard Henderson <rth@redhat.com>
* config/alpha/alpha.c (alpha_emit_conditional_move): Always * config/alpha/alpha.c (alpha_emit_conditional_move): Always
swap GE/GT if its an fp comparison. swap GE/GT if its an fp comparison.
......
...@@ -2728,14 +2728,20 @@ reachable_handlers (insn) ...@@ -2728,14 +2728,20 @@ reachable_handlers (insn)
region = cfun->eh->region_array[region_number]; region = cfun->eh->region_array[region_number];
type_thrown = NULL_TREE; type_thrown = NULL_TREE;
if (region->type == ERT_THROW) if (GET_CODE (insn) == JUMP_INSN
&& GET_CODE (PATTERN (insn)) == RESX)
{ {
type_thrown = region->u.throw.type; /* A RESX leaves a region instead of entering it. Thus the
region itself may have been deleted out from under us. */
if (region == NULL)
return NULL;
region = region->outer; region = region->outer;
} }
else if (GET_CODE (insn) == JUMP_INSN else if (region->type == ERT_THROW)
&& GET_CODE (PATTERN (insn)) == RESX) {
type_thrown = region->u.throw.type;
region = region->outer; region = region->outer;
}
for (; region; region = region->outer) for (; region; region = region->outer)
if (reachable_next_level (region, type_thrown, &info) >= RNL_CAUGHT) if (reachable_next_level (region, type_thrown, &info) >= RNL_CAUGHT)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment