re PR target/78695 (ICE (segfault) on powerpc64le-linux-gnu)
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>
Sun, 11 Dec 2016 23:37:17 +0000 (23:37 +0000)
committerWilliam Schmidt <wschmidt@gcc.gnu.org>
Sun, 11 Dec 2016 23:37:17 +0000 (23:37 +0000)
[gcc]

2016-12-11  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

PR target/78695
* config/rs6000/rs6000.c (find_alignment_op): Discard from
consideration any artificial definition.

[gcc/testsuite]

2016-12-11  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

PR target/78695
* gcc.target/powerpc/swaps-stack-protector.c: New test.

From-SVN: r243534

gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/swaps-stack-protector.c [new file with mode: 0644]

index c9a48b0c02e66b122fef1974ae2263d59dacc944..b6a058bf4494d140116868b1221cf07b14edabbc 100644 (file)
@@ -1,3 +1,9 @@
+2016-12-11  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       PR target/78695
+       * config/rs6000/rs6000.c (find_alignment_op): Discard from
+       consideration any artificial definition.
+
 2016-12-11  Iain Sandoe  <iain@codesourcery.com>
 
        * configure.ac (CROSS directory tests): Remove the assumption that
index 55e9548f7669046d008f543397a784e32eb0e8ac..6aa8436975503d4d562c22551c731cfe91f1bfaf 100644 (file)
@@ -41433,6 +41433,12 @@ find_alignment_op (rtx_insn *insn, rtx base_reg)
       if (!base_def_link || base_def_link->next)
        break;
 
+      /* With stack-protector code enabled, and possibly in other
+        circumstances, there may not be an associated insn for 
+        the def.  */
+      if (DF_REF_IS_ARTIFICIAL (base_def_link->ref))
+       break;
+
       rtx_insn *and_insn = DF_REF_INSN (base_def_link->ref);
       and_operation = alignment_mask (and_insn);
       if (and_operation != 0)
index aa9aae76e13f0689081eedf6f28bad6b3bea7b1e..cde6eefc8eeb378ffc435517b7fd311c008c4c0d 100644 (file)
@@ -1,3 +1,8 @@
+2016-12-11  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       PR target/78695
+       * gcc.target/powerpc/swaps-stack-protector.c: New test.
+
 2016-12-11  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/70799
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-stack-protector.c b/gcc/testsuite/gcc.target/powerpc/swaps-stack-protector.c
new file mode 100644 (file)
index 0000000..8093a26
--- /dev/null
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-fstack-protector -O3" } */
+
+/* PR78695: This code used to ICE in rs6000.c:find_alignment_op because
+   the stack protector address definition isn't associated with an insn.  */
+
+void *a();
+long b() {
+  char c[1];
+  char *d = a(), *e = c;
+  long f = e ? b(e) : 0;
+  if (f > 54)
+    f = 1;
+  while (f--)
+    *d++ = *e++;
+}