2 /* { dg-options "-std=gnu99" } */
4 /* N1169 6.5.7 - Bitwise shift operands.
5 C99 6.5.5 Multiplicative operators.
6 C99 6.5.6 Additive operators.
7 C99 6.5.7 Bitwise shift operators.
8 C99 6.5.8 Relational operators.
9 C99 6.5.9 Equality operators.
10 C99 6.5.16 Assignment operators.
12 Check binary operators + - * / << >> < <= >= > == != += -= *= /= <<= >>=. */
14 extern void abort (void);
16 #define BINARY(TYPE,POSTFIX) \
17 { TYPE a = 0.5 ## POSTFIX; \
18 TYPE b = 0.25 ## POSTFIX; \
19 if (a + b != 0.75 ## POSTFIX) \
21 if (a - b != 0.25 ## POSTFIX) \
23 if (a * b != 0.125 ## POSTFIX) \
25 if (b / a != 0.5 ## POSTFIX) \
44 if (a != 0.75 ## POSTFIX) \
47 if (a != 0.5 ## POSTFIX) \
50 if (a != 0.125 ## POSTFIX) \
53 if (a != 0.5 ## POSTFIX) \
56 if (a != 0.125 ## POSTFIX) \
59 if (a != 0.25 ## POSTFIX) \
63 #define FRACT_SAT_BINARY(TYPE,POSTFIX) \
64 { TYPE a = 0.7 ## POSTFIX; \
65 TYPE b = 0.9 ## POSTFIX; \
66 if (a + b != 1.0 ## POSTFIX) \
68 a = -0.7 ## POSTFIX; \
69 b = -0.9 ## POSTFIX; \
70 if (a + b != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
73 b = -0.9 ## POSTFIX; \
74 if (a - b != 1.0 ## POSTFIX) \
76 a = -0.7 ## POSTFIX; \
78 if (a - b != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
80 a = -0.5 ## POSTFIX - 0.5 ## POSTFIX; \
81 if (a * a != 1.0 ## POSTFIX) \
85 if (a / b != 1.0 ## POSTFIX) \
87 a = -0.8 ## POSTFIX; \
89 if (a / b != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
92 if (a << 4 != 1.0 ## POSTFIX) \
94 a = -0.8 ## POSTFIX; \
95 if (a << 4 != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
99 #define FRACT_SAT_UNS_BINARY(TYPE,POSTFIX) \
100 { TYPE a = 0.7 ## POSTFIX; \
101 TYPE b = 0.9 ## POSTFIX; \
102 if (a + b != 1.0 ## POSTFIX) \
104 if (a - b != 0.0 ## POSTFIX) \
106 if (b / a != 1.0 ## POSTFIX) \
108 if (a << 1 != 1.0 ## POSTFIX) \
114 BINARY(short _Fract
, hr
);
116 BINARY(long _Fract
, lr
);
117 BINARY(long long _Fract
, llr
);
118 BINARY(unsigned short _Fract
, uhr
);
119 BINARY(unsigned _Fract
, ur
);
120 BINARY(unsigned long _Fract
, ulr
);
121 BINARY(unsigned long long _Fract
, ullr
);
122 BINARY(_Sat
short _Fract
, hr
);
123 BINARY(_Sat _Fract
, r
);
124 BINARY(_Sat
long _Fract
, lr
);
125 BINARY(_Sat
long long _Fract
, llr
);
126 BINARY(_Sat
unsigned short _Fract
, uhr
);
127 BINARY(_Sat
unsigned _Fract
, ur
);
128 BINARY(_Sat
unsigned long _Fract
, ulr
);
129 BINARY(_Sat
unsigned long long _Fract
, ullr
);
130 BINARY(short _Accum
, hk
);
132 BINARY(long _Accum
, lk
);
133 BINARY(long long _Accum
, llk
);
134 BINARY(unsigned short _Accum
, uhk
);
135 BINARY(unsigned _Accum
, uk
);
136 BINARY(unsigned long _Accum
, ulk
);
137 BINARY(unsigned long long _Accum
, ullk
);
138 BINARY(_Sat
short _Accum
, hk
);
139 BINARY(_Sat _Accum
, k
);
140 BINARY(_Sat
long _Accum
, lk
);
141 BINARY(_Sat
long long _Accum
, llk
);
142 BINARY(_Sat
unsigned short _Accum
, uhk
);
143 BINARY(_Sat
unsigned _Accum
, uk
);
144 BINARY(_Sat
unsigned long _Accum
, ulk
);
145 BINARY(_Sat
unsigned long long _Accum
, ullk
);
147 FRACT_SAT_BINARY(_Sat
short _Fract
, hr
);
148 FRACT_SAT_BINARY(_Sat _Fract
, r
);
149 FRACT_SAT_BINARY(_Sat
long _Fract
, lr
);
150 FRACT_SAT_BINARY(_Sat
long long _Fract
, llr
);
152 FRACT_SAT_UNS_BINARY(_Sat
unsigned short _Fract
, uhr
);
153 FRACT_SAT_UNS_BINARY(_Sat
unsigned _Fract
, ur
);
154 FRACT_SAT_UNS_BINARY(_Sat
unsigned long _Fract
, ulr
);
155 FRACT_SAT_UNS_BINARY(_Sat
unsigned long long _Fract
, ullr
);