aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDon Lindsay <dlindsay@gcc.gnu.org>2000-04-03 21:05:03 +0000
committerDon Lindsay <dlindsay@gcc.gnu.org>2000-04-03 21:05:03 +0000
commit87e2376db3d7cf905f163dff8424ef877368eed6 (patch)
treefaf5bc681f45ecce4b2011eaef3eee8563948d17
parentc7b95850fbcae16cd38d0540753d0d28192c5446 (diff)
downloadgcc-87e2376db3d7cf905f163dff8424ef877368eed6.zip
gcc-87e2376db3d7cf905f163dff8424ef877368eed6.tar.gz
gcc-87e2376db3d7cf905f163dff8424ef877368eed6.tar.bz2
More va-arg variations. OKed by Jeff Law.
From-SVN: r32887
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/va-arg-15.c46
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/va-arg-16.c43
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/va-arg-17.c39
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/va-arg-18.c24
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/va-arg-19.c39
5 files changed, 191 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/execute/va-arg-15.c b/gcc/testsuite/gcc.c-torture/execute/va-arg-15.c
new file mode 100644
index 0000000..ed1b2e2
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/va-arg-15.c
@@ -0,0 +1,46 @@
+#include <varargs.h>
+
+void vafunction (dummy, va_alist)
+ char *dummy;
+ va_dcl
+{
+ double darg;
+ int iarg;
+ int flag = 0;
+ int i;
+ va_list ap;
+
+ va_start(ap);
+ for (i = 1; i <= 18; i++, flag++)
+ {
+ if (flag & 1)
+ {
+ darg = va_arg (ap, double);
+ if (darg != (double)i)
+ abort();
+ }
+ else
+ {
+ iarg = va_arg (ap, int);
+ if (iarg != i)
+ abort();
+ }
+ }
+ va_end(ap);
+}
+
+int main (void)
+{
+ vafunction( "",
+ 1, 2.,
+ 3, 4.,
+ 5, 6.,
+ 7, 8.,
+ 9, 10.,
+ 11, 12.,
+ 13, 14.,
+ 15, 16.,
+ 17, 18. );
+ exit(0);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/va-arg-16.c b/gcc/testsuite/gcc.c-torture/execute/va-arg-16.c
new file mode 100644
index 0000000..f079721
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/va-arg-16.c
@@ -0,0 +1,43 @@
+#include <varargs.h>
+
+typedef double TYPE;
+
+void vafunction (dummy1, dummy2, va_alist)
+ TYPE dummy1, dummy2;
+ va_dcl
+{
+ va_list ap;
+
+ va_start(ap);
+ if (dummy1 != 888.)
+ abort();
+ if (dummy2 != 999.)
+ abort();
+ if (va_arg (ap, TYPE) != 1.)
+ abort();
+ if (va_arg (ap, TYPE) != 2.)
+ abort();
+ if (va_arg (ap, TYPE) != 3.)
+ abort();
+ if (va_arg (ap, TYPE) != 4.)
+ abort();
+ if (va_arg (ap, TYPE) != 5.)
+ abort();
+ if (va_arg (ap, TYPE) != 6.)
+ abort();
+ if (va_arg (ap, TYPE) != 7.)
+ abort();
+ if (va_arg (ap, TYPE) != 8.)
+ abort();
+ if (va_arg (ap, TYPE) != 9.)
+ abort();
+ va_end(ap);
+}
+
+
+int main (void)
+{
+ vafunction( 888., 999., 1., 2., 3., 4., 5., 6., 7., 8., 9. );
+ exit(0);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/va-arg-17.c b/gcc/testsuite/gcc.c-torture/execute/va-arg-17.c
new file mode 100644
index 0000000..ff72d59
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/va-arg-17.c
@@ -0,0 +1,39 @@
+#include <varargs.h>
+
+typedef double TYPE;
+
+void vafunction (dummy, va_alist)
+ char *dummy;
+ va_dcl
+{
+ va_list ap;
+
+ va_start(ap);
+ if (va_arg (ap, TYPE) != 1.)
+ abort();
+ if (va_arg (ap, TYPE) != 2.)
+ abort();
+ if (va_arg (ap, TYPE) != 3.)
+ abort();
+ if (va_arg (ap, TYPE) != 4.)
+ abort();
+ if (va_arg (ap, TYPE) != 5.)
+ abort();
+ if (va_arg (ap, TYPE) != 6.)
+ abort();
+ if (va_arg (ap, TYPE) != 7.)
+ abort();
+ if (va_arg (ap, TYPE) != 8.)
+ abort();
+ if (va_arg (ap, TYPE) != 9.)
+ abort();
+ va_end(ap);
+}
+
+
+int main (void)
+{
+ vafunction( "", 1., 2., 3., 4., 5., 6., 7., 8., 9. );
+ exit(0);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/va-arg-18.c b/gcc/testsuite/gcc.c-torture/execute/va-arg-18.c
new file mode 100644
index 0000000..00dd54f
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/va-arg-18.c
@@ -0,0 +1,24 @@
+#include <stdarg.h>
+
+typedef double L;
+void f (L p0, L p1, L p2, L p3, L p4, L p5, L p6, L p7, L p8, ...)
+{
+ va_list select;
+
+ va_start (select, p8);
+
+ if (va_arg (select, int) != 10)
+ abort ();
+ if (va_arg (select, int) != 11)
+ abort ();
+ if (va_arg (select, int) != 12)
+ abort ();
+
+ va_end (select);
+}
+
+int main ()
+{
+ f (1., 2., 3., 4., 5., 6., 7., 8., 9., 10, 11, 12);
+ exit (0);
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/va-arg-19.c b/gcc/testsuite/gcc.c-torture/execute/va-arg-19.c
new file mode 100644
index 0000000..d058174
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/va-arg-19.c
@@ -0,0 +1,39 @@
+#include <varargs.h>
+
+typedef int TYPE;
+
+void vafunction (dummy, va_alist)
+ char *dummy;
+ va_dcl
+{
+ va_list ap;
+
+ va_start(ap);
+ if (va_arg (ap, TYPE) != 1)
+ abort();
+ if (va_arg (ap, TYPE) != 2)
+ abort();
+ if (va_arg (ap, TYPE) != 3)
+ abort();
+ if (va_arg (ap, TYPE) != 4)
+ abort();
+ if (va_arg (ap, TYPE) != 5)
+ abort();
+ if (va_arg (ap, TYPE) != 6)
+ abort();
+ if (va_arg (ap, TYPE) != 7)
+ abort();
+ if (va_arg (ap, TYPE) != 8)
+ abort();
+ if (va_arg (ap, TYPE) != 9)
+ abort();
+ va_end(ap);
+}
+
+
+int main (void)
+{
+ vafunction( "", 1, 2, 3, 4, 5, 6, 7, 8, 9 );
+ exit(0);
+ return 0;
+}