aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2006-08-26 07:31:30 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2006-08-26 07:31:30 +0000
commit4a121d41abbdaf9d355756f3c335f3a52f7e8809 (patch)
tree87d9a8578bc5a8967ed24c9ba921f21c3bccb117
parent8a757045f2e490cf696f48074e0d15966e45cc0f (diff)
PR middle-end/28683
* cfgexpand.c (add_reg_br_prob_note): Check if last has exactly 3 following insns. * gcc.c-torture/compile/20060823-1.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116467 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cfgexpand.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20060823-1.c18
4 files changed, 31 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d9f6e4dba86..6360ec64887 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-08-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/28683
+ * cfgexpand.c (add_reg_br_prob_note): Check if last has exactly
+ 3 following insns.
+
2006-08-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
* flow.c (verify_wide_reg): Use internal_error for consistency failure.
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 630a82a28a5..9839d098375 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -58,7 +58,9 @@ add_reg_br_prob_note (rtx last, int probability)
if (!any_condjump_p (last)
|| !JUMP_P (NEXT_INSN (last))
|| !simplejump_p (NEXT_INSN (last))
+ || !NEXT_INSN (NEXT_INSN (last))
|| !BARRIER_P (NEXT_INSN (NEXT_INSN (last)))
+ || !NEXT_INSN (NEXT_INSN (NEXT_INSN (last)))
|| !LABEL_P (NEXT_INSN (NEXT_INSN (NEXT_INSN (last))))
|| NEXT_INSN (NEXT_INSN (NEXT_INSN (NEXT_INSN (last)))))
goto failed;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 39d2fc86507..b9ddcf0ba93 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-08-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/28683
+ * gcc.c-torture/compile/20060823-1.c: New test.
+
2006-08-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/28853
diff --git a/gcc/testsuite/gcc.c-torture/compile/20060823-1.c b/gcc/testsuite/gcc.c-torture/compile/20060823-1.c
new file mode 100644
index 00000000000..fbce7fe941f
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/20060823-1.c
@@ -0,0 +1,18 @@
+/* PR middle-end/28683 */
+
+extern void foo (int *);
+
+struct A
+{
+ int f;
+};
+
+struct A *
+test (struct A *r)
+{
+ int *f = &r->f;
+ static int i = 0;
+ if (!i && !((void *) f == (void *) r))
+ foo (&i);
+ return r;
+}