OSDN Git Service

* gcc.dg/vmx/varargs-1.c: Handle when printf outputs \r\n.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / vmx / varargs-1.c
1 #include <altivec.h>
2 #include <stdarg.h>
3 #include <stdio.h>
4
5 typedef vector unsigned int T;
6
7 extern void f1(int, ...);
8 extern void f2(int, T, ...);
9 extern void f3(int, T, T, ...);
10 extern void f4(int, T, T, T);
11
12 void printx(T a)
13 {
14   union {
15     T v;
16     unsigned long a[4];
17   } u;
18   u.v = a;
19   printf("%ld, %ld, %ld, %ld\n", u.a[0], u.a[1], u.a[2], u.a[3]);
20 }
21
22 void f1(int a, ...)
23 {
24   va_list ap;
25   va_start (ap, a);
26   while (a-- > 0)
27     printx(va_arg(ap, T));
28 }
29
30 void f2(int a, T b, ...)
31 {
32   va_list ap;
33   printx(b);
34   a--;
35   va_start (ap, b);
36   while (a-- > 0)
37     printx(va_arg(ap, T));
38 }
39
40 void f3(int a, T b, T c, ...)
41 {
42   va_list ap;
43   printx(b);
44   a--;
45   printx(c);
46   a--;
47   va_start (ap, c);
48   while (a-- > 0)
49     printx(va_arg(ap, T));
50 }
51
52 void f4(int a, T b, T c,
53         T d)
54 {
55   printx(b);
56   a--;
57   printx(c);
58   a--;
59   printx(d);
60   a--;
61 }
62
63 int main()
64 {
65   f4 (3,
66       ((T){1,1,1,1}),
67       ((T){2,2,2,2}), 
68       ((T){3,3,3,3}));
69   f3 (3,
70       ((T){4,4,4,4}),
71       ((T){5,5,5,5}), 
72       ((T){6,6,6,6}));
73   f2 (3,
74       ((T){7,7,7,7}),
75       ((T){8,8,8,8}), 
76       ((T){9,9,9,9}));
77   f1 (3,
78       ((T){10,10,10,10}),
79       ((T){11,11,11,11}), 
80       ((T){12,12,12,12}));
81   return 0;
82 }
83
84 /* { dg-output "1, 1, 1, 1(\n|\r\n|\r)" }
85    { dg-output "2, 2, 2, 2(\n|\r\n|\r)" }
86    { dg-output "3, 3, 3, 3(\n|\r\n|\r)" }
87    { dg-output "4, 4, 4, 4(\n|\r\n|\r)" }
88    { dg-output "5, 5, 5, 5(\n|\r\n|\r)" }
89    { dg-output "6, 6, 6, 6(\n|\r\n|\r)" }
90    { dg-output "7, 7, 7, 7(\n|\r\n|\r)" }
91    { dg-output "8, 8, 8, 8(\n|\r\n|\r)" }
92    { dg-output "9, 9, 9, 9(\n|\r\n|\r)" }
93    { dg-output "10, 10, 10, 10(\n|\r\n|\r)" }
94    { dg-output "11, 11, 11, 11(\n|\r\n|\r)" }
95    { dg-output "12, 12, 12, 12(\n|\r\n|\r)" }
96  */