OSDN Git Service

* gcc.dg/dfp/func-array.c: Support -DDBG to report individual failures.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / dfp / func-vararg-dfp.c
1 /* { dg-options "-std=gnu99" } */
2
3 /* C99 6.5.2.2 Function calls.
4    Test passing varargs of the decimal float types.  */
5
6 #include <stdarg.h>
7
8 extern void abort (void);
9 static int failcnt = 0;
10                                                                                 
11 /* Support compiling the test to report individual failures; default is
12    to abort as soon as a check fails.  */
13 #ifdef DBG
14 #include <stdio.h>
15 #define FAILURE { printf ("failed at line %d\n", __LINE__); failcnt++; }
16 #else
17 #define FAILURE abort ();
18 #endif
19
20 static _Decimal32
21 vararg32 (unsigned arg, ...)
22 {
23   int i;
24   va_list ap;
25   _Decimal32 result;
26
27   va_start (ap, arg);
28   for (i = 0; i <= arg; i++)
29     result = va_arg (ap, _Decimal32);
30   va_end (ap);
31   return result;
32 }
33
34 static _Decimal64
35 vararg64 (unsigned arg, ...)
36 {
37   int i;
38   va_list ap;
39   _Decimal64 result;
40
41   va_start (ap, arg);
42   for (i = 0; i <= arg; i++)
43     result = va_arg (ap, _Decimal64);
44   va_end (ap);
45   return result;
46 }
47
48 static _Decimal128
49 vararg128 (unsigned arg, ...)
50 {
51   int i;
52   va_list ap;
53   _Decimal128 result;
54
55   va_start (ap, arg);
56   for (i = 0; i <= arg; i++)
57     result = va_arg (ap, _Decimal128);
58   va_end (ap);
59   return result;
60 }
61
62 \f
63 int main()
64 {
65   /* _Decimal32 variants.  */
66   if (vararg32 (0, 0.0df, 1.0df, 2.0df, 3.0df, 4.0df, 5.0df) != 0.0df)
67     FAILURE
68   if (vararg32 (1, 0.0df, 1.0df, 2.0df, 3.0df, 4.0df, 5.0df) != 1.0df)
69     FAILURE
70   if (vararg32 (2, 0.0df, 1.0df, 2.0df, 3.0df, 4.0df, 5.0df) != 2.0df)
71     FAILURE
72   if (vararg32 (3, 0.0df, 1.0df, 2.0df, 3.0df, 4.0df, 5.0df) != 3.0df)
73     FAILURE
74   if (vararg32 (4, 0.0df, 1.0df, 2.0df, 3.0df, 4.0df, 5.0df) != 4.0df)
75     FAILURE
76   if (vararg32 (5, 0.0df, 1.0df, 2.0df, 3.0df, 4.0df, 5.0df) != 5.0df)
77     FAILURE
78
79   /* _Decimal64 variants.  */
80   if (vararg64 (0, 0.0dd, 1.0dd, 2.0dd, 3.0dd, 4.0dd, 5.0dd) != 0.0dd)
81     FAILURE
82   if (vararg64 (1, 0.0dd, 1.0dd, 2.0dd, 3.0dd, 4.0dd, 5.0dd) != 1.0dd)
83     FAILURE
84   if (vararg64 (2, 0.0dd, 1.0dd, 2.0dd, 3.0dd, 4.0dd, 5.0dd) != 2.0dd)
85     FAILURE
86   if (vararg64 (3, 0.0dd, 1.0dd, 2.0dd, 3.0dd, 4.0dd, 5.0dd) != 3.0dd)
87     FAILURE
88   if (vararg64 (4, 0.0dd, 1.0dd, 2.0dd, 3.0dd, 4.0dd, 5.0dd) != 4.0dd)
89     FAILURE
90   if (vararg64 (5, 0.0dd, 1.0dd, 2.0dd, 3.0dd, 4.0dd, 5.0dd) != 5.0dd)
91     FAILURE
92
93   /* _Decimal128 variants.  */
94   if (vararg128 (0, 0.0dl, 1.0dl, 2.0dl, 3.0dl, 4.0dl, 5.0dl) != 0.0dl)
95     FAILURE
96   if (vararg128 (1, 0.0dl, 1.0dl, 2.0dl, 3.0dl, 4.0dl, 5.0dl) != 1.0dl)
97     FAILURE
98   if (vararg128 (2, 0.0dl, 1.0dl, 2.0dl, 3.0dl, 4.0dl, 5.0dl) != 2.0dl)
99     FAILURE
100   if (vararg128 (3, 0.0dl, 1.0dl, 2.0dl, 3.0dl, 4.0dl, 5.0dl) != 3.0dl)
101     FAILURE
102   if (vararg128 (4, 0.0dl, 1.0dl, 2.0dl, 3.0dl, 4.0dl, 5.0dl) != 4.0dl)
103     FAILURE
104   if (vararg128 (5, 0.0dl, 1.0dl, 2.0dl, 3.0dl, 4.0dl, 5.0dl) != 5.0dl)
105     FAILURE
106
107   if (failcnt != 0)
108     abort ();
109   return 0;
110 }