re PR target/65803 (blackfin: internal compiler error: segment fault linux kernel)
authorChen Gang <gang.chen.5i5j@gmail.com>
Wed, 24 Jun 2015 04:22:39 +0000 (04:22 +0000)
committerJeff Law <law@gcc.gnu.org>
Wed, 24 Jun 2015 04:22:39 +0000 (22:22 -0600)
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

gcc/ChangeLog
gcc/config/bfin/bfin.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr65803.c [new file with mode: 0644]

index ab34ffcb2b2015f399660bd458ccd3ae91a4229f..cbd8d88eae5b1fa9ed6b758c4d6ecb514bddaf30 100644 (file)
@@ -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
index 3b4b54e57e85aa1561b94531a775e464eeaa177b..594272ff12fe2db3804bd0341a82da749f92f496 100644 (file)
@@ -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 ();
        }
     }
index e95ed37dbcbe15520fbf72d05dbf680b8f394ef5..5fe00e16862a29ef8596be4e0732fc598fc72591 100644 (file)
@@ -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 (file)
index 0000000..57c6676
--- /dev/null
@@ -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++;
+    }
+}