1/* { dg-do run } */
2/* { dg-options "-std=gnu99 -O0" } */
3
4/* C99 6.5.15 Conditional operator.
5   Test with fixed-point operands.
6   Based on the test from ../dfp/.  */
7
8extern void abort (void);
9volatile int yes, no;
10
11#define FUNC(TYPE,NAME,PF) \
12volatile TYPE NAME ## a, NAME ## b, NAME ## c; \
13void \
14init_ ## NAME () \
15{ \
16  NAME ## b = 0.2 ## PF; \
17  NAME ## c = 0.3 ## PF; \
18  yes = 1; \
19  no = 0; \
20}
21
22FUNC (short _Fract, sf, hr)
23FUNC (_Fract, f, r)
24FUNC (long _Fract, lf, lr)
25FUNC (long long _Fract, llf, llr)
26FUNC (unsigned short _Fract, usf, uhr)
27FUNC (unsigned _Fract, uf, ur)
28FUNC (unsigned long _Fract, ulf, ulr)
29FUNC (long long _Fract, ullf, ullr)
30FUNC (_Sat short _Fract, Ssf, hr)
31FUNC (_Sat _Fract, Sf, r)
32FUNC (_Sat long _Fract, Slf, lr)
33FUNC (_Sat long long _Fract, Sllf, llr)
34FUNC (_Sat unsigned short _Fract, Susf, uhr)
35FUNC (_Sat unsigned _Fract, Suf, ur)
36FUNC (_Sat unsigned long _Fract, Sulf, ulr)
37FUNC (_Sat long long _Fract, Sullf, ullr)
38FUNC (short _Accum, sa, hk)
39FUNC (_Accum, a, k)
40FUNC (long _Accum, la, lk)
41FUNC (long long _Accum, lla, llk)
42FUNC (unsigned short _Accum, usa, uhk)
43FUNC (unsigned _Accum, ua, uk)
44FUNC (unsigned long _Accum, ula, ulk)
45FUNC (long long _Accum, ulla, ullk)
46FUNC (_Sat short _Accum, Ssa, hk)
47FUNC (_Sat _Accum, Sa, k)
48FUNC (_Sat long _Accum, Sla, lk)
49FUNC (_Sat long long _Accum, Slla, llk)
50FUNC (_Sat unsigned short _Accum, Susa, uhk)
51FUNC (_Sat unsigned _Accum, Sua, uk)
52FUNC (_Sat unsigned long _Accum, Sula, ulk)
53FUNC (_Sat long long _Accum, Sulla, ullk)
54
55int
56main ()
57{
58#define TEST(NAME) \
59  init_ ## NAME (); \
60  NAME ## a = yes ? NAME ## b : NAME ## c; \
61  if (NAME ## a != NAME ## b) \
62    abort (); \
63  NAME ## a = no ? NAME ## b : NAME ## c; \
64  if (NAME ## a != NAME ## c) \
65    abort ();
66
67  TEST(sf)
68  TEST(f)
69  TEST(lf)
70  TEST(llf)
71  TEST(usf)
72  TEST(uf)
73  TEST(ulf)
74  TEST(ullf)
75  TEST(Ssf)
76  TEST(Sf)
77  TEST(Slf)
78  TEST(Sllf)
79  TEST(Susf)
80  TEST(Suf)
81  TEST(Sulf)
82  TEST(Sullf)
83  TEST(sa)
84  TEST(a)
85  TEST(la)
86  TEST(lla)
87  TEST(usa)
88  TEST(ua)
89  TEST(ula)
90  TEST(ulla)
91  TEST(Ssa)
92  TEST(Sa)
93  TEST(Sla)
94  TEST(Slla)
95  TEST(Susa)
96  TEST(Sua)
97  TEST(Sula)
98  TEST(Sulla)
99
100  return 0;
101}
102