1#include "compat-common.h"
2
3#ifdef SKIP_VA
4const int test_va = 0;
5#else
6const int test_va = 1;
7#endif
8
9#define T(TYPE)							\
10TYPE g01##TYPE, g02##TYPE, g03##TYPE, g04##TYPE;		\
11TYPE g05##TYPE, g06##TYPE, g07##TYPE, g08##TYPE;		\
12TYPE g09##TYPE, g10##TYPE, g11##TYPE, g12##TYPE;		\
13TYPE g13##TYPE, g14##TYPE, g15##TYPE, g16##TYPE;		\
14								\
15extern void init##TYPE (TYPE *p, int i);			\
16extern void checkg##TYPE (void);				\
17extern TYPE test0##TYPE (void);					\
18extern TYPE test1##TYPE (TYPE);					\
19extern TYPE testva##TYPE (int n, ...);				\
20								\
21void								\
22testit##TYPE (void)						\
23{								\
24  TYPE rslt;							\
25  DEBUG_FPUTS (#TYPE);						\
26  DEBUG_FPUTS (" init: ");					\
27  init##TYPE  (&g01##TYPE,  1);					\
28  init##TYPE  (&g02##TYPE,  2);					\
29  init##TYPE  (&g03##TYPE,  3);					\
30  init##TYPE  (&g04##TYPE,  4);					\
31  init##TYPE  (&g05##TYPE,  5);					\
32  init##TYPE  (&g06##TYPE,  6);					\
33  init##TYPE  (&g07##TYPE,  7);					\
34  init##TYPE  (&g08##TYPE,  8);					\
35  init##TYPE  (&g09##TYPE,  9);					\
36  init##TYPE  (&g10##TYPE, 10);					\
37  init##TYPE  (&g11##TYPE, 11);					\
38  init##TYPE  (&g12##TYPE, 12);					\
39  init##TYPE  (&g13##TYPE, 13);					\
40  init##TYPE  (&g14##TYPE, 14);					\
41  init##TYPE  (&g15##TYPE, 15);					\
42  init##TYPE  (&g16##TYPE, 16);					\
43  checkg##TYPE ();						\
44  DEBUG_NL;							\
45  DEBUG_FPUTS (#TYPE);						\
46  DEBUG_FPUTS (" test0: ");					\
47  rslt = test0##TYPE ();					\
48  check##TYPE (rslt, 1);					\
49  DEBUG_NL;							\
50  DEBUG_FPUTS (#TYPE);						\
51  DEBUG_FPUTS (" test1: ");					\
52  rslt = test1##TYPE (g01##TYPE);				\
53  check##TYPE (rslt, 1);					\
54  if (test_va)							\
55    {								\
56      DEBUG_NL;							\
57      DEBUG_FPUTS (#TYPE);					\
58      DEBUG_FPUTS (" testva: ");				\
59      rslt = testva##TYPE (1, g01##TYPE);			\
60      check##TYPE (rslt, 1);					\
61      rslt = testva##TYPE (5, g01##TYPE, g02##TYPE,		\
62			   g03##TYPE, g04##TYPE,		\
63			   g05##TYPE);				\
64      check##TYPE (rslt, 5);					\
65      rslt = testva##TYPE (9, g01##TYPE, g02##TYPE,		\
66			   g03##TYPE, g04##TYPE,		\
67			   g05##TYPE, g06##TYPE,		\
68			   g07##TYPE, g08##TYPE,		\
69			   g09##TYPE);				\
70      check##TYPE (rslt, 9);					\
71      rslt = testva##TYPE (16, g01##TYPE, g02##TYPE,		\
72			   g03##TYPE, g04##TYPE,		\
73			   g05##TYPE, g06##TYPE,		\
74			   g07##TYPE, g08##TYPE,		\
75			   g09##TYPE, g10##TYPE,		\
76			   g11##TYPE, g12##TYPE,		\
77			   g13##TYPE, g14##TYPE,		\
78			   g15##TYPE, g16##TYPE);		\
79      check##TYPE (rslt, 16);					\
80    }								\
81  DEBUG_NL;							\
82}
83
84#include "union-defs.h"
85#include "union-check.h"
86
87T(Ucs)
88T(Uci)
89T(Ucl)
90T(Ucll)
91T(Usi)
92T(Usl)
93T(Usll)
94T(Uil)
95T(Uill)
96T(Ulll)
97
98#undef T
99
100void
101union_return_1_x ()
102{
103DEBUG_INIT
104
105#define T(TYPE) testit##TYPE ();
106
107T(Ucs)
108T(Uci)
109T(Ucl)
110T(Ucll)
111T(Usi)
112T(Usl)
113T(Usll)
114T(Uil)
115T(Uill)
116T(Ulll)
117
118DEBUG_FINI
119
120if (fails != 0)
121  abort ();
122
123#undef T
124}
125