aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1998-01-17 17:22:34 -0700
committerJeff Law <law@gcc.gnu.org>1998-01-17 17:22:34 -0700
commit70372764a36ccb823ab33db543a527a563ddc0eb (patch)
tree2195453bdfee54b86b0ec132f6c91da7936ce1fd /gcc
parentffc3503d9f3b98e5a5ab72132389282e3f040de5 (diff)
downloadgcc-70372764a36ccb823ab33db543a527a563ddc0eb.zip
gcc-70372764a36ccb823ab33db543a527a563ddc0eb.tar.gz
gcc-70372764a36ccb823ab33db543a527a563ddc0eb.tar.bz2
New test from Joern.
From-SVN: r17410
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/strct-stdarg-1.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/execute/strct-stdarg-1.c b/gcc/testsuite/gcc.c-torture/execute/strct-stdarg-1.c
new file mode 100644
index 0000000..508c954
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/strct-stdarg-1.c
@@ -0,0 +1,61 @@
+#include <stdarg.h>
+
+struct tiny
+{
+ char c;
+ char d;
+ char e;
+ char f;
+ char g;
+};
+
+f (int n, ...)
+{
+ struct tiny x;
+ int i;
+
+ va_list ap;
+ va_start (ap,n);
+ for (i = 0; i < n; i++)
+ {
+ x = va_arg (ap,struct tiny);
+ if (x.c != i + 10)
+ abort();
+ if (x.d != i + 20)
+ abort();
+ if (x.e != i + 30)
+ abort();
+ if (x.f != i + 40)
+ abort();
+ if (x.g != i + 50)
+ abort();
+ }
+ {
+ long x = va_arg (ap, long);
+ if (x != 123)
+ abort();
+ }
+ va_end (ap);
+}
+
+main ()
+{
+ struct tiny x[3];
+ x[0].c = 10;
+ x[1].c = 11;
+ x[2].c = 12;
+ x[0].d = 20;
+ x[1].d = 21;
+ x[2].d = 22;
+ x[0].e = 30;
+ x[1].e = 31;
+ x[2].e = 32;
+ x[0].f = 40;
+ x[1].f = 41;
+ x[2].f = 42;
+ x[0].g = 50;
+ x[1].g = 51;
+ x[2].g = 52;
+ f (3, x[0], x[1], x[2], (long) 123);
+ exit(0);
+}