1/* { dg-do run } */ 2/* { dg-options "-std=gnu99" } */ 3 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/. */ 7 8extern void abort (void); 9 10struct example 11{ 12 short _Fract sf; 13 char dummy1; 14 _Fract f; 15 char dummy2; 16 long _Fract lf; 17 char dummy3; 18 long long _Fract llf; 19 char dummy4; 20 unsigned short _Fract usf; 21 char dummy5; 22 unsigned _Fract uf; 23 char dummy6; 24 unsigned long _Fract ulf; 25 char dummy7; 26 unsigned long long _Fract ullf; 27 char dummy8; 28 _Sat short _Fract Ssf; 29 char dummy9; 30 _Sat _Fract Sf; 31 char dummy10; 32 _Sat long _Fract Slf; 33 char dummy11; 34 _Sat long long _Fract Sllf; 35 char dummy12; 36 _Sat unsigned short _Fract Susf; 37 char dummy13; 38 _Sat unsigned _Fract Suf; 39 char dummy14; 40 _Sat unsigned long _Fract Sulf; 41 char dummy15; 42 _Sat unsigned long long _Fract Sullf; 43 char dummy16; 44 short _Accum sa; 45 char dummya1; 46 _Accum a; 47 char dummya2; 48 long _Accum la; 49 char dummya3; 50 long long _Accum lla; 51 char dummya4; 52 unsigned short _Accum usa; 53 char dummya5; 54 unsigned _Accum ua; 55 char dummya6; 56 unsigned long _Accum ula; 57 char dummya7; 58 unsigned long long _Accum ulla; 59 char dummya8; 60 _Sat short _Accum Ssa; 61 char dummya9; 62 _Sat _Accum Sa; 63 char dummya10; 64 _Sat long _Accum Sla; 65 char dummya11; 66 _Sat long long _Accum Slla; 67 char dummya12; 68 _Sat unsigned short _Accum Susa; 69 char dummya13; 70 _Sat unsigned _Accum Sua; 71 char dummya14; 72 _Sat unsigned long _Accum Sula; 73 char dummya15; 74 _Sat unsigned long long _Accum Sulla; 75 char dummya16; 76} nums = { 0.1hr, 'a', 77 0.2r, 'b', 78 0.3lr, 'c', 79 0.4llr, 'd', 80 0.5uhr, 'e', 81 0.6ur, 'f', 82 0.7ulr, 'g', 83 0.8ullr, 'h', 84 0.11r, 'i', 85 0.22r, 'j', 86 0.33lr, 'k', 87 0.44llr, 'l', 88 0.55uhr, 'm', 89 0.66ur, 'n', 90 0.77ulr, 'o', 91 0.88ullr, 'p', 92 0.1hk, 'q', 93 0.2k, 'r', 94 0.3lk, 's', 95 0.4llk, 't', 96 0.5uhk, 'u', 97 0.6uk, 'v', 98 0.7ulk, 'w', 99 0.8ullk, 'x', 100 0.11k, 'y', 101 0.22k, 'z', 102 0.33lk, '0', 103 0.44llk, '1', 104 0.55uhk, '2', 105 0.66uk, '3', 106 0.77ulk, '4', 107 0.88ullk, '5' 108 }; 109 110/* A handful of functions that return the Nth argument of 111 an incoming array. */ 112 113#define FUNC(TYPE,NAME) \ 114TYPE NAME ## _func (struct example s) \ 115 { return s. NAME; } 116 117FUNC (short _Fract, sf) 118FUNC (_Fract, f) 119FUNC (long _Fract, lf) 120FUNC (long long _Fract, llf) 121FUNC (unsigned short _Fract, usf) 122FUNC (unsigned _Fract, uf) 123FUNC (unsigned long _Fract, ulf) 124FUNC (unsigned long long _Fract, ullf) 125FUNC (_Sat short _Fract, Ssf) 126FUNC (_Sat _Fract, Sf) 127FUNC (_Sat long _Fract, Slf) 128FUNC (_Sat long long _Fract, Sllf) 129FUNC (_Sat unsigned short _Fract, Susf) 130FUNC (_Sat unsigned _Fract, Suf) 131FUNC (_Sat unsigned long _Fract, Sulf) 132FUNC (_Sat unsigned long long _Fract, Sullf) 133FUNC (short _Accum, sa) 134FUNC (_Accum, a) 135FUNC (long _Accum, la) 136FUNC (long long _Accum, lla) 137FUNC (unsigned short _Accum, usa) 138FUNC (unsigned _Accum, ua) 139FUNC (unsigned long _Accum, ula) 140FUNC (unsigned long long _Accum, ulla) 141FUNC (_Sat short _Accum, Ssa) 142FUNC (_Sat _Accum, Sa) 143FUNC (_Sat long _Accum, Sla) 144FUNC (_Sat long long _Accum, Slla) 145FUNC (_Sat unsigned short _Accum, Susa) 146FUNC (_Sat unsigned _Accum, Sua) 147FUNC (_Sat unsigned long _Accum, Sula) 148FUNC (_Sat unsigned long long _Accum, Sulla) 149 150int main() 151{ 152#define TEST(TYPE,NAME,VALUE) \ 153 { \ 154 if (NAME ## _func (nums) != VALUE) abort (); \ 155 } 156 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) 189 190 return 0; 191} 192