1 /* Preprocessor arithmetic semantic tests.  */
2 
3 /* Copyright (C) 2002 Free Software Foundation, Inc.  */
4 /* Source: Neil Booth, 25 May 2002.  */
5 
6 /* The file tests all aspects of preprocessor arithmetic that are
7    independent of target precision.  */
8 
9 /* { dg-do preprocess } */
10 /* { dg-options "" } */
11 
12 /* Test || operator and its short circuiting.  */
13 #if 0 || 0
14 # error		/* { dg-bogus "error" }  */
15 #endif
16 
17 #if 5 || 0
18 #else
19 # error		/* { dg-bogus "error" }  */
20 #endif
21 
22 #if 0 || 1
23 #else
24 # error		/* { dg-bogus "error" }  */
25 #endif
26 
27 #if 1 || 4
28 #else
29 # error		/* { dg-bogus "error" }  */
30 #endif
31 
32 #if 1 || (8 / 0) /* { dg-bogus "division by zero" }  */
33 #else
34 # error		/* { dg-bogus "error" }  */
35 #endif
36 
37 #if 1 || (1 << 256) /* { dg-bogus "overflow" }  */
38 #endif
39 
40 /* Test && operator and its short circuiting.  */
41 #if (0 && 0) || (0 && 1) || (1 && 0)
42 # error		/* { dg-bogus "error" }  */
43 #endif
44 
45 #if 1 && 2
46 #else
47 # error		/* { dg-bogus "error" }  */
48 #endif
49 
50 #if 0 && (8 / 0)/* { dg-bogus "division by zero" }  */
51 # error		/* { dg-bogus "error" }  */
52 #endif
53 
54 #if 0 && (1 << 256) /* { dg-bogus "overflow" }  */
55 #endif
56 
57 /* Test == and != operators, and their signedness.  */
58 #if 1 == 0 || 0 == 1 || 20 != 0x014 || 142 != 0216
59 # error		/* { dg-bogus "error" }  */
60 #endif
61 
62 #if (1 == 1) - 2 > 0 || (1U != 1U) - 2 > 0
63 # error		/* { dg-bogus "error" }  */
64 #endif
65 
66 /* Test ? : operator, its short circuiting, and its signedness.  */
67 #if (1 ? 3: 5) != 3 || (0 ? 3: 5) != 5
68 # error		/* { dg-bogus "error" }  */
69 #endif
70 
71 #if 1 ? 0: 1 / 0 /* { dg-bogus "division by zero" }  */
72 # error		/* { dg-bogus "error" }  */
73 #endif
74 
75 #if 0 ? 1 / 0: 0 /* { dg-bogus "division by zero" }  */
76 # error		/* { dg-bogus "error" }  */
77 #endif
78 
79 #if 0 ? (1 << 256): 0 /* { dg-bogus "overflow" }  */
80 #endif
81 
82 #if 1 ? 0: (1 << 256) /* { dg-bogus "overflow" }  */
83 #endif
84 
85 /* Test unary + and its signedness.  */
86 
87 #if 23 != +23 || 23 != + +23
88 # error		/* { dg-bogus "error" }  */
89 #endif
90 
91 #if (+1 - 2) > 0 || (+1U - 2) < 0
92 # error		/* { dg-bogus "error" }  */
93 #endif
94 
95 /* Test unary - and its signedness.  */
96 
97 #if -1 + 1 != 0
98 # error		/* { dg-bogus "error" }  */
99 #endif
100 
101 #if -1 >= 0 || -1U <= 0
102 # error		/* { dg-bogus "error" }  */
103 #endif
104 
105 /* Test unary ! and its signedness.  */
106 #if !5 != 0 || !1 != 0 || !0 != 1
107 # error		/* { dg-bogus "error" }  */
108 #endif
109 
110 #if !5 - 1 > 0 || !5U - 1 > 0
111 # error		/* { dg-bogus "error" }  */
112 #endif
113 
114 /* Test unary ~ and its signedness.  */
115 #if ~0 != -1 || ~~5 != 5 || ~-2 != 1
116 # error		/* { dg-bogus "error" }  */
117 #endif
118 
119 #if ~5 > 0 || ~5U < 0
120 # error		/* { dg-bogus "error" }  */
121 #endif
122 
123 /* Test comparison operators and their signedness.  */
124 #if 1 >= 1 && 2 >= 1 && -1 >= -1 && -1 >= -2 && 1 >= -1 && 1 >= -2 \
125     && !(-2 >= -1) && !(2 >= 3) && -1U >= 2 && !(-1 >= 1)
126 #else
127 # error		/* { dg-bogus "error" }  */
128 #endif
129 
130 #if ((1 > 0) - 2) > 0 || ((1U > 0) - 2) > 0
131 # error		/* { dg-bogus "error" }  */
132 #endif
133 
134 #if !(1 > 1) && 2 > 1 && !(-1 > -1) && -1 > -2 && 1 > -1 && 1 > -2 \
135     && !(-2 > -1) && !(2 > 3) && -1U > 2 && !(-1 > 1)
136 #else
137 # error		/* { dg-bogus "error" }  */
138 #endif
139 
140 #if ((1 >= 0) - 2) > 0 || ((1U >= 0) - 2) > 0
141 # error		/* { dg-bogus "error" }  */
142 #endif
143 
144 #if 1 <= 1 && !(2 <= 1) && -1 <= -1 && !(-1 <= -2) && !(1 <= -1) && !(1 <= -2) \
145     && -2 <= -1 && 2 <= 3 && !(-1U <= 2) && -1 <= 1
146 #else
147 # error		/* { dg-bogus "error" }  */
148 #endif
149 
150 #if ((1 <= 0) - 2) > 0 || ((1U <= 0) - 2) > 0
151 # error		/* { dg-bogus "error" }  */
152 #endif
153 
154 #if !(1 < 1) && !(2 < 1) && !(-1 < -1) && !(-1 < -2) && !(1 < -1) && !(1 < -2) \
155     && -2 < -1 && 2 < 3 && !(-1U < 2) && -1 < 1
156 #else
157 # error		/* { dg-bogus "error" }  */
158 #endif
159 
160 #if ((1 < 0) - 2) > 0 || ((1U < 0) - 2) > 0
161 # error		/* { dg-bogus "error" }  */
162 #endif
163 
164 /* Test bitwise operators and their signedness.  */
165 #if (3 & 7) != 3 || (-1 & 34) != 34
166 # error		/* { dg-bogus "error" }  */
167 #endif
168 
169 #if (3 & 7) - 20 > 0 || (3 & 7U) - 20 < 0
170 # error		/* { dg-bogus "error" }  */
171 #endif
172 
173 #if (3 | 5) != 7 || (-1 | 34) != -1
174 # error		/* { dg-bogus "error" }  */
175 #endif
176 
177 #if (3 | 7) - 20 > 0 || (3 | 7U) - 20 < 0
178 # error		/* { dg-bogus "error" }  */
179 #endif
180 
181 #if (7 ^ 5) != 2 || (-1 ^ 34) != ~34
182 # error		/* { dg-bogus "error" }  */
183 #endif
184 
185 #if (3 ^ 7) - 20 > 0 || (3 ^ 7U) - 20 < 0
186 # error		/* { dg-bogus "error" }  */
187 #endif
188 
189 /* Test shifts and their signedness.  */
190 #if 3 << 2 != 12 || 3 << -2 != 0 || -1 << 1 != -2
191 # error		/* { dg-bogus "error" }  */
192 #endif
193 
194 #if 5 >> 1 != 2 || 5 >> -2 != 20 || -5 >> 1 != -3
195 # error		/* { dg-bogus "error" }  */
196 #endif
197 
198 #if (5 >> 2) - 2 >= 0 || (5U >> 2) - 2 <= 0
199 # error		/* { dg-bogus "error" }  */
200 #endif
201 
202 #if (5 << 1) - 20 >= 0 || (5U << 1) - 20 <= 0
203 # error		/* { dg-bogus "error" }  */
204 #endif
205 
206 #if 0
207 /* Test min / max and their signedness.  */
208 #if (3 >? 2) != 3 || (-3 >? -2) != -2
209 # error		/* { dg-bogus "error" }  */
210 #endif
211 
212 #if (3 <? 2) != 2 || (-3 <? -2) != -3
213 # error		/* { dg-bogus "error" }  */
214 #endif
215 
216 #if (3 >? 2) - 4 >= 0 || (3 >? 2U) - 4 <= 0
217 # error		/* { dg-bogus "error" }  */
218 #endif
219 
220 #if (3 <? 2) - 4 >= 0 || (3 <? 2U) - 4 <= 0
221 # error		/* { dg-bogus "error" }  */
222 #endif
223 #endif
224 
225 /* Test *, / and % and their signedness.  */
226 #if 3 * 2 != 6 || 3 * -2 != -6 || -2 * 3 != -6 || -2 * -3 != 6
227 # error		/* { dg-bogus "error" }  */
228 #endif
229 
230 #if 3 * 2 - 7 >= 0 || 3 * 2U - 7 < 0
231 # error		/* { dg-bogus "error" }  */
232 #endif
233 
234 #if 5 / 2 != 2 || -325 / 50 != -6 || 53 / -4 != -13 || -55 / -12 != 4
235 # error		/* { dg-bogus "error" }  */
236 #endif
237 
238 #if 3 / 2 - 7 >= 0 || 3 / 2U - 7 < 0
239 # error		/* { dg-bogus "error" }  */
240 #endif
241 
242 #if 5 % 2 != 1 || -325 % 50 != -25 || 53 % -4 != 1 || -55 % -12 != -7
243 # error		/* { dg-bogus "error" }  */
244 #endif
245 
246 #if 3 % 2 - 7 >= 0 || 3U % 2 - 7 < 0
247 # error		/* { dg-bogus "error" }  */
248 #endif
249 
250 /* Test , and its signedness.  */
251 #if (1, 2) != 2 || (2, 1) != 1
252 # error		/* { dg-bogus "error" }  */
253 #endif
254 
255 #if (1, 2) - 3 >= 0 || (1, 2U) - 3 <= 0 || (1U, 2) - 3 >= 0
256 # error		/* { dg-bogus "error" }  */
257 #endif
258