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
)