diff options
author | Richard Henderson <rth@redhat.com> | 2004-03-11 15:19:51 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-03-11 15:19:51 -0800 |
commit | 9caad63ac4e23bcf3368a2c72533624f6e5af79f (patch) | |
tree | 08f9e0d18bb965ce4349c71b21f1a6ea6a2b383d /gcc/except.c | |
parent | 03ca1672e4d910a7829d8680860fe9aa0fbcfbaf (diff) | |
download | gcc-9caad63ac4e23bcf3368a2c72533624f6e5af79f.zip gcc-9caad63ac4e23bcf3368a2c72533624f6e5af79f.tar.gz gcc-9caad63ac4e23bcf3368a2c72533624f6e5af79f.tar.bz2 |
except.c (remove_unreachable_regions): Look thru CALL_PLACEHOLDER.
* except.c (remove_unreachable_regions): Look thru CALL_PLACEHOLDER.
* g++.dg/opt/eh1.C: New.
From-SVN: r79350
Diffstat (limited to 'gcc/except.c')
-rw-r--r-- | gcc/except.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/except.c b/gcc/except.c index 60edf82..809f653 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -1048,7 +1048,18 @@ remove_unreachable_regions (rtx insns) } for (insn = insns; insn; insn = NEXT_INSN (insn)) - reachable[uid_region_num[INSN_UID (insn)]] = true; + { + reachable[uid_region_num[INSN_UID (insn)]] = true; + + if (GET_CODE (insn) == CALL_INSN + && GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER) + for (i = 0; i < 3; i++) + { + rtx sub = XEXP (PATTERN (insn), i); + for (; sub ; sub = NEXT_INSN (sub)) + reachable[uid_region_num[INSN_UID (sub)]] = true; + } + } for (i = cfun->eh->last_region_number; i > 0; --i) { |