aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChen Gang <gang.chen.5i5j@gmail.com>2015-06-24 04:22:39 +0000
committerJeff Law <law@gcc.gnu.org>2015-06-23 22:22:39 -0600
commit5a5c3debfede40be3bdfd5c03a4dbb3ad2d6db21 (patch)
treebfbd85f955fc8b53c6aff06e405428d862f078fe
parent6c4ed5216d64c1650d3438597f99cade69c163ca (diff)
downloadgcc-5a5c3debfede40be3bdfd5c03a4dbb3ad2d6db21.zip
gcc-5a5c3debfede40be3bdfd5c03a4dbb3ad2d6db21.tar.gz
gcc-5a5c3debfede40be3bdfd5c03a4dbb3ad2d6db21.tar.bz2
re PR target/65803 (blackfin: internal compiler error: segment fault linux kernel)
PR target/65803 * config/bfin/bfin.c (hwloop_optimize): Initialize JUMP_LABEL for newly created jump. PR target/65803 * gcc.c-torture/pr65803.c: New test. From-SVN: r224866
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/bfin/bfin.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr65803.c25
4 files changed, 39 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ab34ffc..cbd8d88 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2015-06-23 Chen Gang <gang.chen.5i5j@gmail.com>
+
+ PR target/65803
+ * config/bfin/bfin.c (hwloop_optimize): Initialize
+ JUMP_LABEL for newly created jump.
+
2015-06-23 Tristan Gingold <gingold@adacore.com>
* collect-utils.c (collect_wait): Unlink the response file here
diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c
index 3b4b54e..594272f 100644
--- a/gcc/config/bfin/bfin.c
+++ b/gcc/config/bfin/bfin.c
@@ -3775,7 +3775,9 @@ hwloop_optimize (hwloop_info loop)
}
else
{
- emit_jump_insn (gen_jump (label));
+ rtx_insn *ret = emit_jump_insn (gen_jump (label));
+ JUMP_LABEL (ret) = label;
+ LABEL_NUSES (label)++;
seq_end = emit_barrier ();
}
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e95ed37..5fe00e1 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-06-23 Chen Gang <gang.chen.5i5j@gmail.com>
+
+ PR target/65803
+ * gcc.c-torture/pr65803.c: New test.
+
2015-06-23 Patrick Palka <ppalka@gcc.gnu.org>
PR c++/30044
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr65803.c b/gcc/testsuite/gcc.c-torture/compile/pr65803.c
new file mode 100644
index 0000000..57c6676
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr65803.c
@@ -0,0 +1,25 @@
+/* { dg-options "-fno-strict-overflow" } */
+typedef unsigned char __uint8_t;
+typedef __uint8_t uint8_t;
+typedef uint8_t u8_t;
+typedef struct ip_addr ip_addr_t;
+char *
+ipaddr_ntoa_r (const ip_addr_t * addr, char *buf, int buflen)
+{
+ char inv[3];
+ char *rp;
+ u8_t *ap;
+ u8_t n;
+ u8_t i;
+ int len = 0;
+ for (n = 0; n < 4; n++)
+ {
+ while (*ap);
+ while (i--)
+ {
+ if (len++ >= buflen)
+ return ((void *) 0);
+ *rp++ = inv[i];
+ } ap++;
+ }
+}