diff options
author | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
---|---|---|
committer | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
commit | 554fd8c5195424bdbcabf5de30fdc183aba391bd (patch) | |
tree | 976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/gcc.dg/fixed-point/func-struct.c | |
download | cbb-gcc-4.6.4-upstream.tar.bz2 cbb-gcc-4.6.4-upstream.tar.xz |
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig;
imported gcc-4.6.4 source tree from verified upstream tarball.
downloading a git-generated archive based on the 'upstream' tag
should provide you with a source tree that is binary identical
to the one extracted from the above tarball.
if you have obtained the source via the command 'git clone',
however, do note that line-endings of files in your working
directory might differ from line-endings of the respective
files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/gcc.dg/fixed-point/func-struct.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/fixed-point/func-struct.c | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/fixed-point/func-struct.c b/gcc/testsuite/gcc.dg/fixed-point/func-struct.c new file mode 100644 index 000000000..c75388863 --- /dev/null +++ b/gcc/testsuite/gcc.dg/fixed-point/func-struct.c @@ -0,0 +1,191 @@ +/* { dg-do run } */ +/* { dg-options "-std=gnu99" } */ + +/* C99 6.5.2.2 Function calls. + Test structure passing and return values involving fixed-point types. + Based on the test from ../dfp/. */ + +extern void abort (void); + +struct example +{ + short _Fract sf; + char dummy1; + _Fract f; + char dummy2; + long _Fract lf; + char dummy3; + long long _Fract llf; + char dummy4; + unsigned short _Fract usf; + char dummy5; + unsigned _Fract uf; + char dummy6; + unsigned long _Fract ulf; + char dummy7; + unsigned long long _Fract ullf; + char dummy8; + _Sat short _Fract Ssf; + char dummy9; + _Sat _Fract Sf; + char dummy10; + _Sat long _Fract Slf; + char dummy11; + _Sat long long _Fract Sllf; + char dummy12; + _Sat unsigned short _Fract Susf; + char dummy13; + _Sat unsigned _Fract Suf; + char dummy14; + _Sat unsigned long _Fract Sulf; + char dummy15; + _Sat unsigned long long _Fract Sullf; + char dummy16; + short _Accum sa; + char dummya1; + _Accum a; + char dummya2; + long _Accum la; + char dummya3; + long long _Accum lla; + char dummya4; + unsigned short _Accum usa; + char dummya5; + unsigned _Accum ua; + char dummya6; + unsigned long _Accum ula; + char dummya7; + unsigned long long _Accum ulla; + char dummya8; + _Sat short _Accum Ssa; + char dummya9; + _Sat _Accum Sa; + char dummya10; + _Sat long _Accum Sla; + char dummya11; + _Sat long long _Accum Slla; + char dummya12; + _Sat unsigned short _Accum Susa; + char dummya13; + _Sat unsigned _Accum Sua; + char dummya14; + _Sat unsigned long _Accum Sula; + char dummya15; + _Sat unsigned long long _Accum Sulla; + char dummya16; +} nums = { 0.1hr, 'a', + 0.2r, 'b', + 0.3lr, 'c', + 0.4llr, 'd', + 0.5uhr, 'e', + 0.6ur, 'f', + 0.7ulr, 'g', + 0.8ullr, 'h', + 0.11r, 'i', + 0.22r, 'j', + 0.33lr, 'k', + 0.44llr, 'l', + 0.55uhr, 'm', + 0.66ur, 'n', + 0.77ulr, 'o', + 0.88ullr, 'p', + 0.1hk, 'q', + 0.2k, 'r', + 0.3lk, 's', + 0.4llk, 't', + 0.5uhk, 'u', + 0.6uk, 'v', + 0.7ulk, 'w', + 0.8ullk, 'x', + 0.11k, 'y', + 0.22k, 'z', + 0.33lk, '0', + 0.44llk, '1', + 0.55uhk, '2', + 0.66uk, '3', + 0.77ulk, '4', + 0.88ullk, '5' + }; + +/* A handful of functions that return the Nth argument of + an incoming array. */ + +#define FUNC(TYPE,NAME) \ +TYPE NAME ## _func (struct example s) \ + { return s. NAME; } + +FUNC (short _Fract, sf) +FUNC (_Fract, f) +FUNC (long _Fract, lf) +FUNC (long long _Fract, llf) +FUNC (unsigned short _Fract, usf) +FUNC (unsigned _Fract, uf) +FUNC (unsigned long _Fract, ulf) +FUNC (unsigned long long _Fract, ullf) +FUNC (_Sat short _Fract, Ssf) +FUNC (_Sat _Fract, Sf) +FUNC (_Sat long _Fract, Slf) +FUNC (_Sat long long _Fract, Sllf) +FUNC (_Sat unsigned short _Fract, Susf) +FUNC (_Sat unsigned _Fract, Suf) +FUNC (_Sat unsigned long _Fract, Sulf) +FUNC (_Sat unsigned long long _Fract, Sullf) +FUNC (short _Accum, sa) +FUNC (_Accum, a) +FUNC (long _Accum, la) +FUNC (long long _Accum, lla) +FUNC (unsigned short _Accum, usa) +FUNC (unsigned _Accum, ua) +FUNC (unsigned long _Accum, ula) +FUNC (unsigned long long _Accum, ulla) +FUNC (_Sat short _Accum, Ssa) +FUNC (_Sat _Accum, Sa) +FUNC (_Sat long _Accum, Sla) +FUNC (_Sat long long _Accum, Slla) +FUNC (_Sat unsigned short _Accum, Susa) +FUNC (_Sat unsigned _Accum, Sua) +FUNC (_Sat unsigned long _Accum, Sula) +FUNC (_Sat unsigned long long _Accum, Sulla) + +int main() +{ +#define TEST(TYPE,NAME,VALUE) \ + { \ + if (NAME ## _func (nums) != VALUE) abort (); \ + } + + TEST (short _Fract, sf, 0.1hr) + TEST (_Fract, f, 0.2r) + TEST (long _Fract, lf, 0.3lr) + TEST (long long _Fract, llf, 0.4llr) + TEST (unsigned short _Fract, usf, 0.5uhr) + TEST (unsigned _Fract, uf, 0.6ur) + TEST (unsigned long _Fract, ulf, 0.7ulr) + TEST (unsigned long long _Fract, ullf, 0.8ullr) + TEST (_Sat short _Fract, Ssf, 0.11hr) + TEST (_Sat _Fract, Sf, 0.22r) + TEST (_Sat long _Fract, Slf, 0.33lr) + TEST (_Sat long long _Fract, Sllf, 0.44llr) + TEST (_Sat unsigned short _Fract, Susf, 0.55uhr) + TEST (_Sat unsigned _Fract, Suf, 0.66ur) + TEST (_Sat unsigned long _Fract, Sulf, 0.77ulr) + TEST (_Sat unsigned long long _Fract, Sullf, 0.88ullr) + TEST (short _Accum, sa, 0.1hk) + TEST (_Accum, a, 0.2k) + TEST (long _Accum, la, 0.3lk) + TEST (long long _Accum, lla, 0.4llk) + TEST (unsigned short _Accum, usa, 0.5uhk) + TEST (unsigned _Accum, ua, 0.6uk) + TEST (unsigned long _Accum, ula, 0.7ulk) + TEST (unsigned long long _Accum, ulla, 0.8ullk) + TEST (_Sat short _Accum, Ssa, 0.11hk) + TEST (_Sat _Accum, Sa, 0.22k) + TEST (_Sat long _Accum, Sla, 0.33lk) + TEST (_Sat long long _Accum, Slla, 0.44llk) + TEST (_Sat unsigned short _Accum, Susa, 0.55uhk) + TEST (_Sat unsigned _Accum, Sua, 0.66uk) + TEST (_Sat unsigned long _Accum, Sula, 0.77ulk) + TEST (_Sat unsigned long long _Accum, Sulla, 0.88ullk) + + return 0; +} |