aboutsummaryrefslogtreecommitdiff
path: root/SingleSource/Regression/C/gcc-c-torture/execute/loop-15.c
diff options
context:
space:
mode:
Diffstat (limited to 'SingleSource/Regression/C/gcc-c-torture/execute/loop-15.c')
-rw-r--r--SingleSource/Regression/C/gcc-c-torture/execute/loop-15.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/SingleSource/Regression/C/gcc-c-torture/execute/loop-15.c b/SingleSource/Regression/C/gcc-c-torture/execute/loop-15.c
new file mode 100644
index 00000000..8cb5125a
--- /dev/null
+++ b/SingleSource/Regression/C/gcc-c-torture/execute/loop-15.c
@@ -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;
+}