]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
S/390: PR 69625: Add test case
authorDominik Vogt <vogt@linux.vnet.ibm.com>
Fri, 19 Feb 2016 10:15:43 +0000 (10:15 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Fri, 19 Feb 2016 10:15:43 +0000 (10:15 +0000)
gcc/testsuite/ChangeLog

PR target/69625
* gcc.target/s390/pr69625.c: Add test case.

From-SVN: r233546

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/s390/pr69625.c [new file with mode: 0644]

index b11b838ae926358b6d8293cd5eb7d216e62976b9..dd2ea7067802e43ac1242f4405fd397a15746beb 100644 (file)
@@ -1,3 +1,8 @@
+2016-02-19  Dominik Vogt  <vogt@linux.vnet.ibm.com>
+
+       PR target/69625
+       * gcc.target/s390/pr69625.c: Add test case.
+
 2016-02-18  Bernd Edlinger  <bernd.edlinger@hotmail.de>
 
        PR testsuite/68580
diff --git a/gcc/testsuite/gcc.target/s390/pr69625.c b/gcc/testsuite/gcc.target/s390/pr69625.c
new file mode 100644 (file)
index 0000000..f717183
--- /dev/null
@@ -0,0 +1,37 @@
+/* Test for PR 69625; make sure that a leaf vararg function does not overwrite
+   the caller's r6.  */
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+extern void abort (void);
+
+__attribute__ ((noinline))
+int
+foo (int x, ...)
+{
+  __builtin_va_list vl;
+  int i;
+
+  __asm__ __volatile__ ("lhi %%r6,1" : : : "r6");
+  __builtin_va_start(vl, x);
+  for (i = 2; i <= 6; i++)
+    x += __builtin_va_arg(vl, int);
+  __builtin_va_end (vl);
+
+  return x;
+}
+
+__attribute__ ((noinline))
+void
+bar (int r2, int r3, int r4, int r5, int r6)
+{
+  foo (r2, r3, r4, r5, r6);
+  if (r6 != 6)
+    abort ();
+}
+
+int
+main (void)
+{
+  bar (2, 3, 4, 5, 6);
+}