summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/vmx/varargs-1.c
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/gcc.dg/vmx/varargs-1.c
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/gcc.dg/vmx/varargs-1.c')
-rw-r--r--gcc/testsuite/gcc.dg/vmx/varargs-1.c99
1 files changed, 99 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/vmx/varargs-1.c b/gcc/testsuite/gcc.dg/vmx/varargs-1.c
new file mode 100644
index 000000000..596137464
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vmx/varargs-1.c
@@ -0,0 +1,99 @@
+#include <altivec.h>
+#include <stdarg.h>
+#include <stdio.h>
+
+typedef vector unsigned int T;
+
+extern void f1(int, ...);
+extern void f2(int, T, ...);
+extern void f3(int, T, T, ...);
+extern void f4(int, T, T, T);
+
+void printx(T a)
+{
+ union {
+ T v;
+ unsigned int a[4];
+ } u;
+ u.v = a;
+ printf("%d, %d, %d, %d\n", u.a[0], u.a[1], u.a[2], u.a[3]);
+}
+
+void f1(int a, ...)
+{
+ va_list ap;
+ va_start (ap, a);
+ while (a-- > 0)
+ printx(va_arg(ap, T));
+ va_end (ap);
+}
+
+void f2(int a, T b, ...)
+{
+ va_list ap;
+ printx(b);
+ a--;
+ va_start (ap, b);
+ while (a-- > 0)
+ printx(va_arg(ap, T));
+ va_end (ap);
+}
+
+void f3(int a, T b, T c, ...)
+{
+ va_list ap;
+ printx(b);
+ a--;
+ printx(c);
+ a--;
+ va_start (ap, c);
+ while (a-- > 0)
+ printx(va_arg(ap, T));
+ va_end (ap);
+}
+
+void f4(int a, T b, T c,
+ T d)
+{
+ printx(b);
+ a--;
+ printx(c);
+ a--;
+ printx(d);
+ a--;
+}
+
+int main()
+{
+ f4 (3,
+ ((T){1,1,1,1}),
+ ((T){2,2,2,2}),
+ ((T){3,3,3,3}));
+ f3 (3,
+ ((T){4,4,4,4}),
+ ((T){5,5,5,5}),
+ ((T){6,6,6,6}));
+ f2 (3,
+ ((T){7,7,7,7}),
+ ((T){8,8,8,8}),
+ ((T){9,9,9,9}));
+ f1 (3,
+ ((T){10,10,10,10}),
+ ((T){11,11,11,11}),
+ ((T){12,12,12,12}));
+ return 0;
+}
+
+/* { dg-output "1, 1, 1, 1(\n|\r\n|\r)" }
+ { dg-output "2, 2, 2, 2(\n|\r\n|\r)" }
+ { dg-output "3, 3, 3, 3(\n|\r\n|\r)" }
+ { dg-output "4, 4, 4, 4(\n|\r\n|\r)" }
+ { dg-output "5, 5, 5, 5(\n|\r\n|\r)" }
+ { dg-output "6, 6, 6, 6(\n|\r\n|\r)" }
+ { dg-output "7, 7, 7, 7(\n|\r\n|\r)" }
+ { dg-output "8, 8, 8, 8(\n|\r\n|\r)" }
+ { dg-output "9, 9, 9, 9(\n|\r\n|\r)" }
+ { dg-output "10, 10, 10, 10(\n|\r\n|\r)" }
+ { dg-output "11, 11, 11, 11(\n|\r\n|\r)" }
+ { dg-output "12, 12, 12, 12(\n|\r\n|\r)" }
+ */