diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-03-11 23:19:51 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-03-11 23:19:51 +0000 |
commit | e8587c1f732c0ee664610acc90a15036ef9af326 (patch) | |
tree | 08f9e0d18bb965ce4349c71b21f1a6ea6a2b383d /gcc/except.c | |
parent | 2c267f1ab865fab0562d29799906277c4c17a8b1 (diff) | |
download | gcc-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.c | 13 |
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) { |