summaryrefslogtreecommitdiff
path: root/gcc/except.c
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2004-03-11 23:19:51 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2004-03-11 23:19:51 +0000
commite8587c1f732c0ee664610acc90a15036ef9af326 (patch)
tree08f9e0d18bb965ce4349c71b21f1a6ea6a2b383d /gcc/except.c
parent2c267f1ab865fab0562d29799906277c4c17a8b1 (diff)
downloadgcc-e8587c1f732c0ee664610acc90a15036ef9af326.tar.gz
* except.c (remove_unreachable_regions): Look thru CALL_PLACEHOLDER.
* g++.dg/opt/eh1.C: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@79350 138bc75d-0d04-0410-961f-82ee72b054a4
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 60edf8227b9..809f6536c78 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)
{