summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/fixed-point/func-struct.c
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/gcc.dg/fixed-point/func-struct.c
downloadcbb-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.c191
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;
+}