diff options
author | Adam Nemet <anemet@caviumnetworks.com> | 2009-04-12 19:36:50 +0000 |
---|---|---|
committer | Adam Nemet <nemet@gcc.gnu.org> | 2009-04-12 19:36:50 +0000 |
commit | efaadb930b1db67a8b25b53c31a1ffb2000cdae0 (patch) | |
tree | 7da62a2d8311cb87cbf1676d15fee403e936898e | |
parent | 4c48007b43c7e5fed48347f81e3d27e71e6a5751 (diff) | |
download | gcc-efaadb930b1db67a8b25b53c31a1ffb2000cdae0.zip gcc-efaadb930b1db67a8b25b53c31a1ffb2000cdae0.tar.gz gcc-efaadb930b1db67a8b25b53c31a1ffb2000cdae0.tar.bz2 |
re PR middle-end/39651 (New cleanup test failures)
PR middle-end/39651
* except.c (can_throw_external): Look at each insn in a SEQUENCE
when deciding whether the whole SEQUENCE can throw.
From-SVN: r145986
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/except.c | 11 |
2 files changed, 16 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cce9c47..04b6507 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-04-12 Adam Nemet <anemet@caviumnetworks.com> + + PR middle-end/39651 + * except.c (can_throw_external): Look at each insn in a SEQUENCE + when deciding whether the whole SEQUENCE can throw. + 2009-04-12 Uros Bizjak <ubizjak@gmail.com> PR target/39740 diff --git a/gcc/except.c b/gcc/except.c index a0a81bc..889dd61 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -2892,7 +2892,16 @@ can_throw_external (const_rtx insn) if (NONJUMP_INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE) - insn = XVECEXP (PATTERN (insn), 0, 0); + { + rtx seq = PATTERN (insn); + int i, n = XVECLEN (seq, 0); + + for (i = 0; i < n; i++) + if (can_throw_external (XVECEXP (seq, 0, i))) + return true; + + return false; + } note = find_reg_note (insn, REG_EH_REGION, NULL_RTX); if (!note) |