2 /* { dg-options "-std=gnu99" } */
4 /* C99 6.5.2.2 Function calls.
5 Test structure passing and return values involving fixed-point types.
6 Based on the test from ../dfp/. */
8 extern void abort (void);
20 unsigned short _Fract usf;
24 unsigned long _Fract ulf;
26 unsigned long long _Fract ullf;
28 _Sat short _Fract Ssf;
34 _Sat long long _Fract Sllf;
36 _Sat unsigned short _Fract Susf;
38 _Sat unsigned _Fract Suf;
40 _Sat unsigned long _Fract Sulf;
42 _Sat unsigned long long _Fract Sullf;
52 unsigned short _Accum usa;
56 unsigned long _Accum ula;
58 unsigned long long _Accum ulla;
60 _Sat short _Accum Ssa;
66 _Sat long long _Accum Slla;
68 _Sat unsigned short _Accum Susa;
70 _Sat unsigned _Accum Sua;
72 _Sat unsigned long _Accum Sula;
74 _Sat unsigned long long _Accum Sulla;
76 } nums = { 0.1hr, 'a',
110 /* A handful of functions that return the Nth argument of
111 an incoming array. */
113 #define FUNC(TYPE,NAME) \
114 TYPE NAME ## _func (struct example s) \
117 FUNC (short _Fract, sf)
119 FUNC (long _Fract, lf)
120 FUNC (long long _Fract, llf)
121 FUNC (unsigned short _Fract, usf)
122 FUNC (unsigned _Fract, uf)
123 FUNC (unsigned long _Fract, ulf)
124 FUNC (unsigned long long _Fract, ullf)
125 FUNC (_Sat short _Fract, Ssf)
126 FUNC (_Sat _Fract, Sf)
127 FUNC (_Sat long _Fract, Slf)
128 FUNC (_Sat long long _Fract, Sllf)
129 FUNC (_Sat unsigned short _Fract, Susf)
130 FUNC (_Sat unsigned _Fract, Suf)
131 FUNC (_Sat unsigned long _Fract, Sulf)
132 FUNC (_Sat unsigned long long _Fract, Sullf)
133 FUNC (short _Accum, sa)
135 FUNC (long _Accum, la)
136 FUNC (long long _Accum, lla)
137 FUNC (unsigned short _Accum, usa)
138 FUNC (unsigned _Accum, ua)
139 FUNC (unsigned long _Accum, ula)
140 FUNC (unsigned long long _Accum, ulla)
141 FUNC (_Sat short _Accum, Ssa)
142 FUNC (_Sat _Accum, Sa)
143 FUNC (_Sat long _Accum, Sla)
144 FUNC (_Sat long long _Accum, Slla)
145 FUNC (_Sat unsigned short _Accum, Susa)
146 FUNC (_Sat unsigned _Accum, Sua)
147 FUNC (_Sat unsigned long _Accum, Sula)
148 FUNC (_Sat unsigned long long _Accum, Sulla)
152 #define TEST(TYPE,NAME,VALUE) \
154 if (NAME ## _func (nums) != VALUE) abort (); \
157 TEST (short _Fract, sf, 0.1hr)
158 TEST (_Fract, f, 0.2r)
159 TEST (long _Fract, lf, 0.3lr)
160 TEST (long long _Fract, llf, 0.4llr)
161 TEST (unsigned short _Fract, usf, 0.5uhr)
162 TEST (unsigned _Fract, uf, 0.6ur)
163 TEST (unsigned long _Fract, ulf, 0.7ulr)
164 TEST (unsigned long long _Fract, ullf, 0.8ullr)
165 TEST (_Sat short _Fract, Ssf, 0.11hr)
166 TEST (_Sat _Fract, Sf, 0.22r)
167 TEST (_Sat long _Fract, Slf, 0.33lr)
168 TEST (_Sat long long _Fract, Sllf, 0.44llr)
169 TEST (_Sat unsigned short _Fract, Susf, 0.55uhr)
170 TEST (_Sat unsigned _Fract, Suf, 0.66ur)
171 TEST (_Sat unsigned long _Fract, Sulf, 0.77ulr)
172 TEST (_Sat unsigned long long _Fract, Sullf, 0.88ullr)
173 TEST (short _Accum, sa, 0.1hk)
174 TEST (_Accum, a, 0.2k)
175 TEST (long _Accum, la, 0.3lk)
176 TEST (long long _Accum, lla, 0.4llk)
177 TEST (unsigned short _Accum, usa, 0.5uhk)
178 TEST (unsigned _Accum, ua, 0.6uk)
179 TEST (unsigned long _Accum, ula, 0.7ulk)
180 TEST (unsigned long long _Accum, ulla, 0.8ullk)
181 TEST (_Sat short _Accum, Ssa, 0.11hk)
182 TEST (_Sat _Accum, Sa, 0.22k)
183 TEST (_Sat long _Accum, Sla, 0.33lk)
184 TEST (_Sat long long _Accum, Slla, 0.44llk)
185 TEST (_Sat unsigned short _Accum, Susa, 0.55uhk)
186 TEST (_Sat unsigned _Accum, Sua, 0.66uk)
187 TEST (_Sat unsigned long _Accum, Sula, 0.77ulk)
188 TEST (_Sat unsigned long long _Accum, Sulla, 0.88ullk)