aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2009-07-01 21:25:52 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2009-07-01 21:25:52 +0200
commit2a5bd62a7f71759e66631b7c89ea445ad8108df1 (patch)
tree449608efe265033e9156ce4205d5969e5e9053d9
parentedd3a61c4a3a5d8ba8327c5d5635ac4a988ba820 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/dwarf2out.c16
-rw-r--r--gcc/jump.c5
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;
}
diff --git a/gcc/jump.c b/gcc/jump.c
index 533f11c..28a9b0f 100644
--- a/gcc/jump.c
+++ b/gcc/jump.c
@@ -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);
}