diff options
author | Richard Henderson <rth@redhat.com> | 2001-07-25 12:59:39 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2001-07-25 12:59:39 -0700 |
commit | 7f206d8f42ecbe874b67712a5994dc4459ca4795 (patch) | |
tree | 81776281a5b49fa724e3261fe61abe19f6a66d5f /gcc | |
parent | 2c938d4292ac41e4c753763ba8ef7e1c5d4892de (diff) | |
download | gcc-7f206d8f42ecbe874b67712a5994dc4459ca4795.zip gcc-7f206d8f42ecbe874b67712a5994dc4459ca4795.tar.gz gcc-7f206d8f42ecbe874b67712a5994dc4459ca4795.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/except.c | 14 |
2 files changed, 15 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3e9f613..973a821 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 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 swap GE/GT if its an fp comparison. diff --git a/gcc/except.c b/gcc/except.c index 01e83f0..b45237c 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) |