* gcc.c-torture/execute/loop-15.c: New.
authorAlan Modra <amodra@bigpond.net.au>
Thu, 26 Sep 2002 23:05:57 +0000 (23:05 +0000)
committerAlan Modra <amodra@gcc.gnu.org>
Thu, 26 Sep 2002 23:05:57 +0000 (08:35 +0930)
From-SVN: r57557

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/loop-15.c [new file with mode: 0644]

index d312b01e33e3d28c3d43aead8619bb909ab50395..cc0a7e1571919a0860b1b18e0f815a8d1a9ed7f0 100644 (file)
@@ -1,3 +1,7 @@
+2002-09-27  Alan Modra  <amodra@bigpond.net.au>
+
+       * gcc.c-torture/execute/loop-15.c: New.
+
 2002-09-26  Janis Johnson  <janis187@us.ibm.com>
 
        * README.QMTEST: Fix typo.
diff --git a/gcc/testsuite/gcc.c-torture/execute/loop-15.c b/gcc/testsuite/gcc.c-torture/execute/loop-15.c
new file mode 100644 (file)
index 0000000..8cb5125
--- /dev/null
@@ -0,0 +1,40 @@
+/* Bombed with a segfault on powerpc-linux.  doloop.c generated wrong
+   loop count.  */
+void
+foo (unsigned long *start, unsigned long *end)
+{
+  unsigned long *temp = end - 1;
+
+  while (end > start)
+    *end-- = *temp--;
+}
+
+int
+main (void)
+{
+  unsigned long a[5];
+  int start, end, k;
+
+  for (start = 0; start < 5; start++)
+    for (end = 0; end < 5; end++)
+      {
+       for (k = 0; k < 5; k++)
+         a[k] = k;
+
+       foo (a + start, a + end);
+
+       for (k = 0; k <= start; k++)
+         if (a[k] != k)
+           abort ();
+
+       for (k = start + 1; k <= end; k++)
+         if (a[k] != k - 1)
+           abort ();
+
+       for (k = end + 1; k < 5; k++)
+         if (a[k] != k)
+           abort ();
+      }
+
+  return 0;
+}