mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-14 06:26:43 +08:00
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
This commit is contained in:
parent
2c938d4292
commit
7f206d8f42
@ -1,3 +1,8 @@
|
||||
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
|
||||
|
14
gcc/except.c
14
gcc/except.c
@ -2728,14 +2728,20 @@ reachable_handlers (insn)
|
||||
region = cfun->eh->region_array[region_number];
|
||||
|
||||
type_thrown = NULL_TREE;
|
||||
if (region->type == ERT_THROW)
|
||||
if (GET_CODE (insn) == JUMP_INSN
|
||||
&& GET_CODE (PATTERN (insn)) == RESX)
|
||||
{
|
||||
/* 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;
|
||||
}
|
||||
else if (region->type == ERT_THROW)
|
||||
{
|
||||
type_thrown = region->u.throw.type;
|
||||
region = region->outer;
|
||||
}
|
||||
else if (GET_CODE (insn) == JUMP_INSN
|
||||
&& GET_CODE (PATTERN (insn)) == RESX)
|
||||
region = region->outer;
|
||||
|
||||
for (; region; region = region->outer)
|
||||
if (reachable_next_level (region, type_thrown, &info) >= RNL_CAUGHT)
|
||||
|
Loading…
Reference in New Issue
Block a user