OSDN Git Service

* gcc.dg/compat/compat-common.h: New file.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / compat / struct-return-3_x.c
1 #include "compat-common.h"
2
3 /* Turn off checking for variable arguments with -DSKIPVA.  */
4 #ifdef SKIPVA
5 const int test_va = 0;
6 #else
7 const int test_va = 1;
8 #endif
9
10 #define T(TYPE)                                                 \
11 TYPE g01##TYPE, g02##TYPE, g03##TYPE, g04##TYPE;                \
12 TYPE g05##TYPE, g06##TYPE, g07##TYPE, g08##TYPE;                \
13 TYPE g09##TYPE, g10##TYPE, g11##TYPE, g12##TYPE;                \
14 TYPE g13##TYPE, g14##TYPE, g15##TYPE, g16##TYPE;                \
15                                                                 \
16 extern void init##TYPE (TYPE *p, int i);                        \
17 extern void checkg##TYPE (void);                                \
18 extern TYPE test0##TYPE (void);                                 \
19 extern TYPE test1##TYPE (TYPE);                                 \
20 extern TYPE testva##TYPE (int n, ...);                          \
21                                                                 \
22 void                                                            \
23 testit##TYPE (void)                                             \
24 {                                                               \
25   TYPE rslt;                                                    \
26   DEBUG_FPUTS (#TYPE);                                          \
27   DEBUG_FPUTS (" init: ");                                      \
28   init##TYPE  (&g01##TYPE,  1);                                 \
29   init##TYPE  (&g02##TYPE,  2);                                 \
30   init##TYPE  (&g03##TYPE,  3);                                 \
31   init##TYPE  (&g04##TYPE,  4);                                 \
32   init##TYPE  (&g05##TYPE,  5);                                 \
33   init##TYPE  (&g06##TYPE,  6);                                 \
34   init##TYPE  (&g07##TYPE,  7);                                 \
35   init##TYPE  (&g08##TYPE,  8);                                 \
36   init##TYPE  (&g09##TYPE,  9);                                 \
37   init##TYPE  (&g10##TYPE, 10);                                 \
38   init##TYPE  (&g11##TYPE, 11);                                 \
39   init##TYPE  (&g12##TYPE, 12);                                 \
40   init##TYPE  (&g13##TYPE, 13);                                 \
41   init##TYPE  (&g14##TYPE, 14);                                 \
42   init##TYPE  (&g15##TYPE, 15);                                 \
43   init##TYPE  (&g16##TYPE, 16);                                 \
44   checkg##TYPE ();                                              \
45   DEBUG_NL;                                                     \
46   DEBUG_FPUTS (#TYPE);                                          \
47   DEBUG_FPUTS (" test0: ");                                     \
48   rslt = test0##TYPE ();                                        \
49   check##TYPE (rslt, 1);                                        \
50   DEBUG_NL;                                                     \
51   DEBUG_FPUTS (#TYPE);                                          \
52   DEBUG_FPUTS (" test1: ");                                     \
53   rslt = test1##TYPE (g01##TYPE);                               \
54   check##TYPE (rslt, 1);                                        \
55   if (test_va)                                                  \
56     {                                                           \
57       DEBUG_NL;                                                 \
58       DEBUG_FPUTS (#TYPE);                                      \
59       DEBUG_FPUTS (" testva: ");                                \
60       rslt = testva##TYPE (1, g01##TYPE);                       \
61       check##TYPE (rslt, 1);                                    \
62       rslt = testva##TYPE (5, g01##TYPE, g02##TYPE,             \
63                            g03##TYPE, g04##TYPE,                \
64                            g05##TYPE);                          \
65       check##TYPE (rslt, 5);                                    \
66       rslt = testva##TYPE (9, g01##TYPE, g02##TYPE,             \
67                            g03##TYPE, g04##TYPE,                \
68                            g05##TYPE, g06##TYPE,                \
69                            g07##TYPE, g08##TYPE,                \
70                            g09##TYPE);                          \
71       check##TYPE (rslt, 9);                                    \
72       rslt = testva##TYPE (16, g01##TYPE, g02##TYPE,            \
73                            g03##TYPE, g04##TYPE,                \
74                            g05##TYPE, g06##TYPE,                \
75                            g07##TYPE, g08##TYPE,                \
76                            g09##TYPE, g10##TYPE,                \
77                            g11##TYPE, g12##TYPE,                \
78                            g13##TYPE, g14##TYPE,                \
79                            g15##TYPE, g16##TYPE);               \
80       check##TYPE (rslt, 16);                                   \
81     }                                                           \
82   DEBUG_NL;                                                     \
83 }
84
85 #include "small-struct-defs.h"
86 #include "small-struct-check.h"
87
88 T(Sc)
89 T(Ss)
90 T(Si)
91 T(Scs)
92 T(Ssc)
93 T(Sic)
94 T(Sci)
95 T(Ssi)
96 T(Sis)
97 T(Scsi)
98 T(Scis)
99 T(Ssci)
100 T(Ssic)
101 T(Sisc)
102 T(Sics)
103
104 #undef T
105
106 void
107 struct_return_3_x ()
108 {
109 #define T(TYPE) testit##TYPE ();
110
111 T(Sc)
112 T(Ss)
113 T(Si)
114 T(Scs)
115 T(Ssc)
116 T(Sic)
117 T(Sci)
118 T(Ssi)
119 T(Sis)
120 T(Scsi)
121 T(Scis)
122 T(Ssci)
123 T(Ssic)
124 T(Sisc)
125 T(Sics)
126
127 if (fails != 0)
128   abort ();
129
130 #undef T
131 }