diff options
author | Jakub Jelinek <jakub@redhat.com> | 2009-07-01 21:25:52 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2009-07-01 21:25:52 +0200 |
commit | 2a5bd62a7f71759e66631b7c89ea445ad8108df1 (patch) | |
tree | 449608efe265033e9156ce4205d5969e5e9053d9 | |
parent | edd3a61c4a3a5d8ba8327c5d5635ac4a988ba820 (diff) | |
download | gcc-2a5bd62a7f71759e66631b7c89ea445ad8108df1.zip gcc-2a5bd62a7f71759e66631b7c89ea445ad8108df1.tar.gz gcc-2a5bd62a7f71759e66631b7c89ea445ad8108df1.tar.bz2 |
re PR debug/40462 (ICE in dwarf2out_begin_epilogue, at dwarf2out.c:2773 while compiling mlib-tgt.adb)
PR debug/40462
* jump.c (returnjump_p): Revert last patch.
* dwarf2out.c (dwarf2out_begin_epilogue): Handle SEQUENCEs.
From-SVN: r149150
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 16 | ||||
-rw-r--r-- | gcc/jump.c | 5 |
3 files changed, 22 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 022af0a..c71f379 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-07-01 Jakub Jelinek <jakub@redhat.com> + + PR debug/40462 + * jump.c (returnjump_p): Revert last patch. + * dwarf2out.c (dwarf2out_begin_epilogue): Handle SEQUENCEs. + 2009-07-01 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> PR target/40575 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 35c26b6..edb93f9 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -2759,6 +2759,22 @@ dwarf2out_begin_epilogue (rtx insn) if (CALL_P (i) && SIBLING_CALL_P (i)) break; + if (GET_CODE (PATTERN (i)) == SEQUENCE) + { + int idx; + rtx seq = PATTERN (i); + + if (returnjump_p (XVECEXP (seq, 0, 0))) + break; + if (CALL_P (XVECEXP (seq, 0, 0)) + && SIBLING_CALL_P (XVECEXP (seq, 0, 0))) + break; + + for (idx = 0; idx < XVECLEN (seq, 0); idx++) + if (RTX_FRAME_RELATED_P (XVECEXP (seq, 0, idx))) + saw_frp = true; + } + if (RTX_FRAME_RELATED_P (i)) saw_frp = true; } @@ -893,13 +893,8 @@ returnjump_p_1 (rtx *loc, void *data ATTRIBUTE_UNUSED) int returnjump_p (rtx insn) { - /* Handle delayed branches. */ - if (NONJUMP_INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE) - insn = XVECEXP (PATTERN (insn), 0, 0); - if (!JUMP_P (insn)) return 0; - return for_each_rtx (&PATTERN (insn), returnjump_p_1, NULL); } |