From: Richard Henderson Date: Wed, 25 Jul 2001 19:59:39 +0000 (-0700) Subject: except.c (reachable_handlers): Handle a region being removed out from under a RESX. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7f206d8f42ecbe874b67712a5994dc4459ca4795;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3e9f613975b..973a821b3c4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-07-25 Richard Henderson + + * except.c (reachable_handlers): Handle a region being removed + out from under a RESX. + 2001-07-25 Richard Henderson * config/alpha/alpha.c (alpha_emit_conditional_move): Always diff --git a/gcc/except.c b/gcc/except.c index 01e83f0c469..b45237cfa00 100644 --- a/gcc/except.c +++ b/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)