aboutsummaryrefslogtreecommitdiff
path: root/gcc/except.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2004-03-11 15:19:51 -0800
committerRichard Henderson <rth@gcc.gnu.org>2004-03-11 15:19:51 -0800
commit9caad63ac4e23bcf3368a2c72533624f6e5af79f (patch)
tree08f9e0d18bb965ce4349c71b21f1a6ea6a2b383d /gcc/except.c
parent03ca1672e4d910a7829d8680860fe9aa0fbcfbaf (diff)
downloadgcc-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.c13
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)
{