111
|
1 /* { dg-do compile } */
|
|
2 /* { dg-options "-O -fdiagnostics-show-caret -fpermissive" } */
|
|
3
|
|
4 /* This is a collection of unittests to verify that we're correctly
|
|
5 capturing the source code ranges of various kinds of expression.
|
|
6
|
|
7 It uses the various "diagnostic_test_*_expression_range_plugin"
|
|
8 plugins which handles "__emit_expression_range" by generating a warning
|
|
9 at the given source range of the input argument. Each of the
|
|
10 different plugins do this at a different phase of the internal
|
|
11 representation (tree, gimple, etc), so we can verify that the
|
|
12 source code range information is valid at each phase.
|
|
13
|
|
14 We want to accept an expression of any type. We use variadic arguments.
|
|
15 For compatibility with the C tests we have a dummy argument, since
|
|
16 C requires at least one argument before the ellipsis. */
|
|
17
|
|
18 extern void __emit_expression_range (int dummy, ...);
|
|
19
|
|
20 int global;
|
|
21
|
131
|
22 void test_global (void)
|
|
23 {
|
|
24 __emit_expression_range (0, global); /* { dg-warning "range" } */
|
|
25 /* { dg-begin-multiline-output "" }
|
|
26 __emit_expression_range (0, global);
|
|
27 ^~~~~~
|
|
28 { dg-end-multiline-output "" } */
|
|
29 }
|
|
30
|
|
31 void test_param (int param)
|
|
32 {
|
|
33 __emit_expression_range (0, param); /* { dg-warning "range" } */
|
|
34 /* { dg-begin-multiline-output "" }
|
|
35 __emit_expression_range (0, param);
|
|
36 ^~~~~
|
|
37 { dg-end-multiline-output "" } */
|
|
38 }
|
|
39
|
|
40 void test_local (void)
|
|
41 {
|
|
42 int local = 5;
|
|
43
|
|
44 __emit_expression_range (0, local); /* { dg-warning "range" } */
|
|
45 /* { dg-begin-multiline-output "" }
|
|
46 __emit_expression_range (0, local);
|
|
47 ^~~~~
|
|
48 { dg-end-multiline-output "" } */
|
|
49 }
|
|
50
|
|
51 void test_integer_constants (void)
|
|
52 {
|
|
53 __emit_expression_range (0, 1234); /* { dg-warning "range" } */
|
|
54 /* { dg-begin-multiline-output "" }
|
|
55 __emit_expression_range (0, 1234);
|
|
56 ^~~~
|
|
57 { dg-end-multiline-output "" } */
|
|
58
|
|
59 /* Ensure that zero works. */
|
|
60
|
|
61 __emit_expression_range (0, 0); /* { dg-warning "range" } */
|
|
62 /* { dg-begin-multiline-output "" }
|
|
63 __emit_expression_range (0, 0);
|
|
64 ^
|
|
65 { dg-end-multiline-output "" } */
|
145
|
66
|
|
67 __emit_expression_range (0, -273); /* { dg-warning "range" } */
|
|
68 /* { dg-begin-multiline-output "" }
|
|
69 __emit_expression_range (0, -273);
|
|
70 ^~~~
|
|
71 { dg-end-multiline-output "" } */
|
|
72
|
131
|
73 }
|
|
74
|
|
75 void test_character_constants (void)
|
|
76 {
|
|
77 __emit_expression_range (0, 'a'); /* { dg-warning "range" } */
|
|
78 /* { dg-begin-multiline-output "" }
|
|
79 __emit_expression_range (0, 'a');
|
|
80 ^~~
|
|
81 { dg-end-multiline-output "" } */
|
|
82 }
|
|
83
|
|
84 void test_floating_constants (void)
|
|
85 {
|
|
86 __emit_expression_range (0, 98.6); /* { dg-warning "range" } */
|
|
87 /* { dg-begin-multiline-output "" }
|
|
88 __emit_expression_range (0, 98.6);
|
|
89 ^~~~
|
|
90 { dg-end-multiline-output "" } */
|
|
91
|
|
92 __emit_expression_range (0, .6); /* { dg-warning "range" } */
|
|
93 /* { dg-begin-multiline-output "" }
|
|
94 __emit_expression_range (0, .6);
|
|
95 ^~
|
|
96 { dg-end-multiline-output "" } */
|
|
97
|
|
98 __emit_expression_range (0, 98.); /* { dg-warning "range" } */
|
|
99 /* { dg-begin-multiline-output "" }
|
|
100 __emit_expression_range (0, 98.);
|
|
101 ^~~
|
|
102 { dg-end-multiline-output "" } */
|
|
103
|
|
104 __emit_expression_range (0, 6.022140857e23 ); /* { dg-warning "range" } */
|
|
105 /* { dg-begin-multiline-output "" }
|
|
106 __emit_expression_range (0, 6.022140857e23 );
|
|
107 ^~~~~~~~~~~~~~
|
|
108 { dg-end-multiline-output "" } */
|
|
109
|
|
110 __emit_expression_range (0, 98.6f ); /* { dg-warning "range" } */
|
|
111 /* { dg-begin-multiline-output "" }
|
|
112 __emit_expression_range (0, 98.6f );
|
|
113 ^~~~~
|
|
114 { dg-end-multiline-output "" } */
|
|
115
|
|
116 __emit_expression_range (0, 6.022140857e23l ); /* { dg-warning "range" } */
|
|
117 /* { dg-begin-multiline-output "" }
|
|
118 __emit_expression_range (0, 6.022140857e23l );
|
|
119 ^~~~~~~~~~~~~~~
|
|
120 { dg-end-multiline-output "" } */
|
145
|
121
|
|
122 __emit_expression_range (0, -273.15f); /* { dg-warning "range" } */
|
|
123 /* { dg-begin-multiline-output "" }
|
|
124 __emit_expression_range (0, -273.15f);
|
|
125 ^~~~~~~~
|
|
126 { dg-end-multiline-output "" } */
|
|
127
|
131
|
128 }
|
|
129
|
|
130 enum test_enum {
|
|
131 TEST_ENUM_VALUE
|
|
132 };
|
|
133
|
|
134 void test_enumeration_constant (void)
|
|
135 {
|
|
136 __emit_expression_range (0, TEST_ENUM_VALUE ); /* { dg-warning "range" } */
|
|
137 /* { dg-begin-multiline-output "" }
|
|
138 __emit_expression_range (0, TEST_ENUM_VALUE );
|
|
139 ^~~~~~~~~~~~~~~
|
|
140 { dg-end-multiline-output "" } */
|
|
141 }
|
|
142
|
111
|
143 void test_parentheses (int a, int b)
|
|
144 {
|
|
145 __emit_expression_range (0, (a + b) ); /* { dg-warning "range" } */
|
|
146 /* { dg-begin-multiline-output "" }
|
|
147 __emit_expression_range (0, (a + b) );
|
|
148 ~~~^~~~
|
|
149 { dg-end-multiline-output "" } */
|
|
150
|
|
151 __emit_expression_range (0, (a + b) * (a - b) ); /* { dg-warning "range" } */
|
|
152 /* { dg-begin-multiline-output "" }
|
|
153 __emit_expression_range (0, (a + b) * (a - b) );
|
|
154 ~~~~~~~~^~~~~~~~~
|
|
155 { dg-end-multiline-output "" } */
|
|
156
|
|
157 __emit_expression_range (0, !(a && b) ); /* { dg-warning "range" } */
|
|
158 /* { dg-begin-multiline-output "" }
|
|
159 __emit_expression_range (0, !(a && b) );
|
|
160 ^~~~~~~~~
|
|
161 { dg-end-multiline-output "" } */
|
|
162 }
|
|
163
|
|
164 /* Postfix expressions. ************************************************/
|
|
165
|
|
166 void test_array_reference (int *arr)
|
|
167 {
|
|
168 __emit_expression_range (0, arr[100] ); /* { dg-warning "range" } */
|
|
169 /* { dg-begin-multiline-output "" }
|
|
170 __emit_expression_range (0, arr[100] );
|
|
171 ~~~~~~~^
|
|
172 { dg-end-multiline-output "" } */
|
|
173 }
|
|
174
|
|
175 int test_function_call (int p, int q, int r)
|
|
176 {
|
|
177 __emit_expression_range (0, test_function_call (p, q, r) ); /* { dg-warning "range" } */
|
|
178 /* { dg-begin-multiline-output "" }
|
|
179 __emit_expression_range (0, test_function_call (p, q, r) );
|
|
180 ~~~~~~~~~~~~~~~~~~~^~~~~~~~~
|
|
181 { dg-end-multiline-output "" } */
|
|
182 return 0;
|
|
183 }
|
|
184
|
|
185 struct test_struct
|
|
186 {
|
|
187 int field;
|
|
188 };
|
|
189
|
131
|
190 void test_structure_references (struct test_struct *ptr)
|
111
|
191 {
|
|
192 struct test_struct local;
|
|
193 local.field = 42;
|
|
194
|
|
195 __emit_expression_range (0, local.field ); /* { dg-warning "range" } */
|
|
196 /* { dg-begin-multiline-output "" }
|
|
197 __emit_expression_range (0, local.field );
|
|
198 ~~~~~~^~~~~
|
|
199 { dg-end-multiline-output "" } */
|
|
200
|
|
201 __emit_expression_range (0, ptr->field ); /* { dg-warning "range" } */
|
|
202 /* { dg-begin-multiline-output "" }
|
|
203 __emit_expression_range (0, ptr->field );
|
|
204 ~~~~~^~~~~
|
|
205 { dg-end-multiline-output "" } */
|
|
206 }
|
|
207
|
131
|
208 void test_postfix_incdec (int i)
|
111
|
209 {
|
|
210 __emit_expression_range (0, i++ ); /* { dg-warning "range" } */
|
|
211 /* { dg-begin-multiline-output "" }
|
|
212 __emit_expression_range (0, i++ );
|
|
213 ~^~
|
|
214 { dg-end-multiline-output "" } */
|
|
215
|
|
216 __emit_expression_range (0, i-- ); /* { dg-warning "range" } */
|
|
217 /* { dg-begin-multiline-output "" }
|
|
218 __emit_expression_range (0, i-- );
|
|
219 ~^~
|
|
220 { dg-end-multiline-output "" } */
|
|
221 }
|
|
222
|
|
223 /* Unary operators. ****************************************************/
|
|
224
|
131
|
225 void test_sizeof (int i)
|
111
|
226 {
|
131
|
227 __emit_expression_range (0, sizeof i ); /* { dg-warning "range" } */
|
111
|
228 /* { dg-begin-multiline-output "" }
|
131
|
229 __emit_expression_range (0, sizeof i );
|
|
230 ^~~~~~~~
|
111
|
231 { dg-end-multiline-output "" } */
|
|
232
|
131
|
233 __emit_expression_range (0, sizeof (char) ); /* { dg-warning "range" } */
|
111
|
234 /* { dg-begin-multiline-output "" }
|
131
|
235 __emit_expression_range (0, sizeof (char) );
|
|
236 ^~~~~~~~~~~~~
|
111
|
237 { dg-end-multiline-output "" } */
|
|
238 }
|
|
239
|
131
|
240 void test_alignof (int i)
|
111
|
241 {
|
131
|
242 __emit_expression_range (0, alignof(int)); /* { dg-warning "range" } */
|
111
|
243 /* { dg-begin-multiline-output "" }
|
131
|
244 __emit_expression_range (0, alignof(int));
|
|
245 ^~~~~~~~~~~~
|
111
|
246 { dg-end-multiline-output "" } */
|
|
247
|
131
|
248 __emit_expression_range (0, __alignof__(int)); /* { dg-warning "range" } */
|
111
|
249 /* { dg-begin-multiline-output "" }
|
131
|
250 __emit_expression_range (0, __alignof__(int));
|
|
251 ^~~~~~~~~~~~~~~~
|
111
|
252 { dg-end-multiline-output "" } */
|
131
|
253 __emit_expression_range (0, __alignof__ i); /* { dg-warning "range" } */
|
111
|
254 /* { dg-begin-multiline-output "" }
|
131
|
255 __emit_expression_range (0, __alignof__ i);
|
|
256 ^~~~~~~~~~~~~
|
111
|
257 { dg-end-multiline-output "" } */
|
|
258 }
|
|
259
|
131
|
260 void test_prefix_incdec (int i)
|
111
|
261 {
|
|
262 __emit_expression_range (0, ++i ); /* { dg-warning "range" } */
|
|
263 /* { dg-begin-multiline-output "" }
|
|
264 __emit_expression_range (0, ++i );
|
|
265 ^~~
|
|
266 { dg-end-multiline-output "" } */
|
|
267
|
|
268 __emit_expression_range (0, --i ); /* { dg-warning "range" } */
|
|
269 /* { dg-begin-multiline-output "" }
|
|
270 __emit_expression_range (0, --i );
|
|
271 ^~~
|
|
272 { dg-end-multiline-output "" } */
|
|
273 }
|
|
274
|
|
275 void test_address_operator (void)
|
|
276 {
|
|
277 __emit_expression_range (0, &global ); /* { dg-warning "range" } */
|
|
278 /* { dg-begin-multiline-output "" }
|
|
279 __emit_expression_range (0, &global );
|
|
280 ^~~~~~~
|
|
281 { dg-end-multiline-output "" } */
|
|
282 }
|
|
283
|
|
284 void test_indirection (int *ptr)
|
|
285 {
|
|
286 __emit_expression_range (0, *ptr ); /* { dg-warning "range" } */
|
|
287 /* { dg-begin-multiline-output "" }
|
|
288 __emit_expression_range (0, *ptr );
|
|
289 ^~~~
|
|
290 { dg-end-multiline-output "" } */
|
|
291 }
|
|
292
|
131
|
293 void test_unary_plus (int i)
|
|
294 {
|
|
295 __emit_expression_range (0, +i ); /* { dg-warning "range" } */
|
|
296 /* { dg-begin-multiline-output "" }
|
|
297 __emit_expression_range (0, +i );
|
|
298 ^~
|
|
299 { dg-end-multiline-output "" } */
|
|
300 }
|
|
301
|
111
|
302 void test_unary_minus (int i)
|
|
303 {
|
|
304 __emit_expression_range (0, -i ); /* { dg-warning "range" } */
|
|
305 /* { dg-begin-multiline-output "" }
|
|
306 __emit_expression_range (0, -i );
|
|
307 ^~
|
|
308 { dg-end-multiline-output "" } */
|
|
309 }
|
|
310
|
|
311 void test_ones_complement (int i)
|
|
312 {
|
|
313 __emit_expression_range (0, ~i ); /* { dg-warning "range" } */
|
|
314 /* { dg-begin-multiline-output "" }
|
|
315 __emit_expression_range (0, ~i );
|
|
316 ^~
|
|
317 { dg-end-multiline-output "" } */
|
|
318 }
|
|
319
|
|
320 void test_logical_negation (int flag)
|
|
321 {
|
|
322 __emit_expression_range (0, !flag ); /* { dg-warning "range" } */
|
|
323 /* { dg-begin-multiline-output "" }
|
|
324 __emit_expression_range (0, !flag );
|
|
325 ^~~~~
|
|
326 { dg-end-multiline-output "" } */
|
|
327 }
|
|
328
|
|
329 /* Casts. ****************************************************/
|
|
330
|
|
331 void test_cast (void *ptr)
|
|
332 {
|
|
333 __emit_expression_range (0, (int *)ptr ); /* { dg-warning "range" } */
|
|
334 /* { dg-begin-multiline-output "" }
|
|
335 __emit_expression_range (0, (int *)ptr );
|
|
336 ^~~~~~~~~~
|
|
337 { dg-end-multiline-output "" } */
|
|
338
|
|
339 __emit_expression_range (0, *(int *)0xdeadbeef ); /* { dg-warning "range" } */
|
|
340 /* { dg-begin-multiline-output "" }
|
|
341 __emit_expression_range (0, *(int *)0xdeadbeef );
|
|
342 ^~~~~~~~~~~~~~~~~~
|
|
343 { dg-end-multiline-output "" } */
|
|
344
|
|
345 }
|
|
346
|
|
347 /* Binary operators. *******************************************/
|
|
348
|
|
349 void test_multiplicative_operators (int lhs, int rhs)
|
|
350 {
|
|
351 __emit_expression_range (0, lhs * rhs ); /* { dg-warning "range" } */
|
|
352 /* { dg-begin-multiline-output "" }
|
|
353 __emit_expression_range (0, lhs * rhs );
|
|
354 ~~~~^~~~~
|
|
355 { dg-end-multiline-output "" } */
|
|
356
|
|
357 __emit_expression_range (0, lhs / rhs ); /* { dg-warning "range" } */
|
|
358 /* { dg-begin-multiline-output "" }
|
|
359 __emit_expression_range (0, lhs / rhs );
|
|
360 ~~~~^~~~~
|
|
361 { dg-end-multiline-output "" } */
|
|
362
|
|
363 __emit_expression_range (0, lhs % rhs ); /* { dg-warning "range" } */
|
|
364 /* { dg-begin-multiline-output "" }
|
|
365 __emit_expression_range (0, lhs % rhs );
|
|
366 ~~~~^~~~~
|
|
367 { dg-end-multiline-output "" } */
|
|
368 }
|
|
369
|
|
370 void test_additive_operators (int lhs, int rhs)
|
|
371 {
|
|
372 __emit_expression_range (0, lhs + rhs ); /* { dg-warning "range" } */
|
|
373 /* { dg-begin-multiline-output "" }
|
|
374 __emit_expression_range (0, lhs + rhs );
|
|
375 ~~~~^~~~~
|
|
376 { dg-end-multiline-output "" } */
|
|
377
|
|
378 __emit_expression_range (0, lhs - rhs ); /* { dg-warning "range" } */
|
|
379 /* { dg-begin-multiline-output "" }
|
|
380 __emit_expression_range (0, lhs - rhs );
|
|
381 ~~~~^~~~~
|
|
382 { dg-end-multiline-output "" } */
|
|
383 }
|
|
384
|
|
385 void test_shift_operators (int lhs, int rhs)
|
|
386 {
|
|
387 __emit_expression_range (0, lhs << rhs ); /* { dg-warning "range" } */
|
|
388 /* { dg-begin-multiline-output "" }
|
|
389 __emit_expression_range (0, lhs << rhs );
|
|
390 ~~~~^~~~~~
|
|
391 { dg-end-multiline-output "" } */
|
|
392
|
|
393 __emit_expression_range (0, lhs >> rhs ); /* { dg-warning "range" } */
|
|
394 /* { dg-begin-multiline-output "" }
|
|
395 __emit_expression_range (0, lhs >> rhs );
|
|
396 ~~~~^~~~~~
|
|
397 { dg-end-multiline-output "" } */
|
|
398 }
|
|
399
|
|
400 void test_relational_operators (int lhs, int rhs)
|
|
401 {
|
|
402 __emit_expression_range (0, lhs < rhs ); /* { dg-warning "range" } */
|
|
403 /* { dg-begin-multiline-output "" }
|
|
404 __emit_expression_range (0, lhs < rhs );
|
|
405 ~~~~^~~~~
|
|
406 { dg-end-multiline-output "" } */
|
|
407
|
|
408 __emit_expression_range (0, lhs > rhs ); /* { dg-warning "range" } */
|
|
409 /* { dg-begin-multiline-output "" }
|
|
410 __emit_expression_range (0, lhs > rhs );
|
|
411 ~~~~^~~~~
|
|
412 { dg-end-multiline-output "" } */
|
|
413
|
|
414 __emit_expression_range (0, lhs <= rhs ); /* { dg-warning "range" } */
|
|
415 /* { dg-begin-multiline-output "" }
|
|
416 __emit_expression_range (0, lhs <= rhs );
|
|
417 ~~~~^~~~~~
|
|
418 { dg-end-multiline-output "" } */
|
|
419
|
|
420 __emit_expression_range (0, lhs >= rhs ); /* { dg-warning "range" } */
|
|
421 /* { dg-begin-multiline-output "" }
|
|
422 __emit_expression_range (0, lhs >= rhs );
|
|
423 ~~~~^~~~~~
|
|
424 { dg-end-multiline-output "" } */
|
|
425 }
|
|
426
|
|
427 void test_equality_operators (int lhs, int rhs)
|
|
428 {
|
|
429 __emit_expression_range (0, lhs == rhs ); /* { dg-warning "range" } */
|
|
430 /* { dg-begin-multiline-output "" }
|
|
431 __emit_expression_range (0, lhs == rhs );
|
|
432 ~~~~^~~~~~
|
|
433 { dg-end-multiline-output "" } */
|
|
434
|
|
435 __emit_expression_range (0, lhs != rhs ); /* { dg-warning "range" } */
|
|
436 /* { dg-begin-multiline-output "" }
|
|
437 __emit_expression_range (0, lhs != rhs );
|
|
438 ~~~~^~~~~~
|
|
439 { dg-end-multiline-output "" } */
|
|
440 }
|
|
441
|
|
442 void test_bitwise_binary_operators (int lhs, int rhs)
|
|
443 {
|
|
444 __emit_expression_range (0, lhs & rhs ); /* { dg-warning "range" } */
|
|
445 /* { dg-begin-multiline-output "" }
|
|
446 __emit_expression_range (0, lhs & rhs );
|
|
447 ~~~~^~~~~
|
|
448 { dg-end-multiline-output "" } */
|
|
449
|
|
450 __emit_expression_range (0, lhs ^ rhs ); /* { dg-warning "range" } */
|
|
451 /* { dg-begin-multiline-output "" }
|
|
452 __emit_expression_range (0, lhs ^ rhs );
|
|
453 ~~~~^~~~~
|
|
454 { dg-end-multiline-output "" } */
|
|
455
|
|
456 __emit_expression_range (0, lhs | rhs ); /* { dg-warning "range" } */
|
|
457 /* { dg-begin-multiline-output "" }
|
|
458 __emit_expression_range (0, lhs | rhs );
|
|
459 ~~~~^~~~~
|
|
460 { dg-end-multiline-output "" } */
|
|
461 }
|
|
462
|
|
463 void test_logical_operators (int lhs, int rhs)
|
|
464 {
|
|
465 __emit_expression_range (0, lhs && rhs ); /* { dg-warning "range" } */
|
|
466 /* { dg-begin-multiline-output "" }
|
|
467 __emit_expression_range (0, lhs && rhs );
|
|
468 ~~~~^~~~~~
|
|
469 { dg-end-multiline-output "" } */
|
|
470
|
|
471 __emit_expression_range (0, lhs || rhs ); /* { dg-warning "range" } */
|
|
472 /* { dg-begin-multiline-output "" }
|
|
473 __emit_expression_range (0, lhs || rhs );
|
|
474 ~~~~^~~~~~
|
|
475 { dg-end-multiline-output "" } */
|
|
476 }
|
|
477
|
|
478 /* Conditional operator. *******************************************/
|
|
479
|
|
480 void test_conditional_operators (int flag, int on_true, int on_false)
|
|
481 {
|
|
482 __emit_expression_range (0, flag ? on_true : on_false ); /* { dg-warning "range" } */
|
|
483 /* { dg-begin-multiline-output "" }
|
|
484 __emit_expression_range (0, flag ? on_true : on_false );
|
|
485 ~~~~~^~~~~~~~~~~~~~~~~~~~
|
|
486 { dg-end-multiline-output "" } */
|
|
487 }
|
|
488
|
|
489 /* Assignment expressions. *******************************************/
|
|
490
|
|
491 void test_assignment_expressions (int dest, int other)
|
|
492 {
|
|
493 __emit_expression_range (0, dest = other ); /* { dg-warning "range" } */
|
|
494 /* { dg-begin-multiline-output "" }
|
|
495 __emit_expression_range (0, dest = other );
|
|
496 ~~~~~^~~~~~~
|
|
497 { dg-end-multiline-output "" } */
|
|
498
|
|
499 __emit_expression_range (0, dest *= other ); /* { dg-warning "range" } */
|
|
500 /* { dg-begin-multiline-output "" }
|
|
501 __emit_expression_range (0, dest *= other );
|
|
502 ~~~~~^~~~~~~~
|
|
503 { dg-end-multiline-output "" } */
|
|
504
|
|
505 __emit_expression_range (0, dest /= other ); /* { dg-warning "range" } */
|
|
506 /* { dg-begin-multiline-output "" }
|
|
507 __emit_expression_range (0, dest /= other );
|
|
508 ~~~~~^~~~~~~~
|
|
509 { dg-end-multiline-output "" } */
|
|
510
|
|
511 __emit_expression_range (0, dest %= other ); /* { dg-warning "range" } */
|
|
512 /* { dg-begin-multiline-output "" }
|
|
513 __emit_expression_range (0, dest %= other );
|
|
514 ~~~~~^~~~~~~~
|
|
515 { dg-end-multiline-output "" } */
|
|
516
|
|
517 __emit_expression_range (0, dest += other ); /* { dg-warning "range" } */
|
|
518 /* { dg-begin-multiline-output "" }
|
|
519 __emit_expression_range (0, dest += other );
|
|
520 ~~~~~^~~~~~~~
|
|
521 { dg-end-multiline-output "" } */
|
|
522
|
|
523 __emit_expression_range (0, dest -= other ); /* { dg-warning "range" } */
|
|
524 /* { dg-begin-multiline-output "" }
|
|
525 __emit_expression_range (0, dest -= other );
|
|
526 ~~~~~^~~~~~~~
|
|
527 { dg-end-multiline-output "" } */
|
|
528
|
|
529 __emit_expression_range (0, dest <<= other ); /* { dg-warning "range" } */
|
|
530 /* { dg-begin-multiline-output "" }
|
|
531 __emit_expression_range (0, dest <<= other );
|
|
532 ~~~~~^~~~~~~~~
|
|
533 { dg-end-multiline-output "" } */
|
|
534
|
|
535 __emit_expression_range (0, dest >>= other ); /* { dg-warning "range" } */
|
|
536 /* { dg-begin-multiline-output "" }
|
|
537 __emit_expression_range (0, dest >>= other );
|
|
538 ~~~~~^~~~~~~~~
|
|
539 { dg-end-multiline-output "" } */
|
|
540
|
|
541 __emit_expression_range (0, dest &= other ); /* { dg-warning "range" } */
|
|
542 /* { dg-begin-multiline-output "" }
|
|
543 __emit_expression_range (0, dest &= other );
|
|
544 ~~~~~^~~~~~~~
|
|
545 { dg-end-multiline-output "" } */
|
|
546
|
|
547 __emit_expression_range (0, dest ^= other ); /* { dg-warning "range" } */
|
|
548 /* { dg-begin-multiline-output "" }
|
|
549 __emit_expression_range (0, dest ^= other );
|
|
550 ~~~~~^~~~~~~~
|
|
551 { dg-end-multiline-output "" } */
|
|
552
|
|
553 __emit_expression_range (0, dest |= other ); /* { dg-warning "range" } */
|
|
554 /* { dg-begin-multiline-output "" }
|
|
555 __emit_expression_range (0, dest |= other );
|
|
556 ~~~~~^~~~~~~~
|
|
557 { dg-end-multiline-output "" } */
|
|
558 }
|
|
559
|
|
560 /* Comma operator. *******************************************/
|
|
561
|
|
562 void test_comma_operator (int a, int b)
|
|
563 {
|
|
564 __emit_expression_range (0, (a++, a + b) ); /* { dg-warning "range" } */
|
|
565 /* { dg-begin-multiline-output "" }
|
|
566 __emit_expression_range (0, (a++, a + b) );
|
|
567 ~~~~^~~~~~~~
|
|
568 { dg-end-multiline-output "" } */
|
|
569 }
|
|
570
|
|
571 /* Literals. **************************************************/
|
|
572
|
131
|
573 void test_string_literals ()
|
111
|
574 {
|
131
|
575 __emit_expression_range (0, "0123456789"); /* { dg-warning "range" } */
|
111
|
576 /* { dg-begin-multiline-output "" }
|
131
|
577 __emit_expression_range (0, "0123456789");
|
|
578 ^~~~~~~~~~~~
|
111
|
579 { dg-end-multiline-output "" } */
|
|
580
|
131
|
581 __emit_expression_range (0, "foo" "bar" ); /* { dg-warning "range" } */
|
111
|
582 /* { dg-begin-multiline-output "" }
|
131
|
583 __emit_expression_range (0, "foo" "bar" );
|
|
584 ^~~~~~~~~~~
|
111
|
585 { dg-end-multiline-output "" } */
|
|
586 }
|
|
587
|
|
588 void test_numeric_literals (int i)
|
|
589 {
|
131
|
590 __emit_expression_range (0, 42 ); /* { dg-warning "range" } */
|
111
|
591 /* { dg-begin-multiline-output "" }
|
131
|
592 __emit_expression_range (0, 42 );
|
|
593 ^~
|
111
|
594 { dg-end-multiline-output "" } */
|
|
595
|
|
596 /* Verify locations of negative literals (via folding of
|
|
597 unary negation). */
|
|
598
|
131
|
599 __emit_expression_range (0, -42 ); /* { dg-warning "range" } */
|
111
|
600 /* { dg-begin-multiline-output "" }
|
131
|
601 __emit_expression_range (0, -42 );
|
|
602 ^~~
|
111
|
603 { dg-end-multiline-output "" } */
|
|
604
|
|
605 __emit_expression_range (0, i ? 0 : -1 ); /* { dg-warning "range" } */
|
|
606 /* { dg-begin-multiline-output "" }
|
|
607 __emit_expression_range (0, i ? 0 : -1 );
|
|
608 ~~^~~~~~~~
|
|
609 { dg-end-multiline-output "" } */
|
|
610 }
|
|
611
|
|
612 /* Braced initializers. ***************************************/
|
|
613
|
|
614 /* We can't test the ranges of these directly, since the underlying
|
|
615 tree nodes don't retain a location. However, we can test that they
|
|
616 have ranges during parsing by building compound expressions using
|
|
617 them, and verifying the ranges of the compound expressions. */
|
|
618
|
|
619 #define vector(elcount, type) \
|
|
620 __attribute__((vector_size((elcount)*sizeof(type)))) type
|
|
621
|
|
622 void test_braced_init (void)
|
|
623 {
|
|
624 /* Verify start of range. */
|
|
625 __emit_expression_range (0, (vector(4, float)){2., 2., 2., 2.} + 1); /* { dg-warning "range" } */
|
|
626 /* { dg-begin-multiline-output "" }
|
|
627 __emit_expression_range (0, (vector(4, float)){2., 2., 2., 2.} + 1);
|
|
628 ~~~~~~~~~~~~~~~~~^~~
|
|
629 { dg-end-multiline-output "" } */
|
|
630
|
|
631 /* Verify end of range. */
|
|
632 __emit_expression_range (0, 1 + (vector(4, float)){2., 2., 2., 2.}); /* { dg-warning "range" } */
|
|
633 /* { dg-begin-multiline-output "" }
|
|
634 __emit_expression_range (0, 1 + (vector(4, float)){2., 2., 2., 2.});
|
|
635 ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
636 { dg-end-multiline-output "" } */
|
|
637 }
|
|
638
|
|
639 /* Statement expressions. ***************************************/
|
|
640
|
|
641 void test_statement_expression (void)
|
|
642 {
|
|
643 __emit_expression_range (0, ({ static int a; a; }) + 1); /* { dg-warning "range" } */
|
|
644 /* { dg-begin-multiline-output "" }
|
|
645 __emit_expression_range (0, ({ static int a; a; }) + 1);
|
|
646 ~~~~~~~~~~~~~~~~~~~~~~~^~~
|
|
647 { dg-end-multiline-output "" } */
|
|
648
|
|
649 __emit_expression_range (0, 1 + ({ static int a; a; }) ); /* { dg-warning "range" } */
|
|
650 /* { dg-begin-multiline-output "" }
|
|
651 __emit_expression_range (0, 1 + ({ static int a; a; }) );
|
|
652 ~~^~~~~~~~~~~~~~~~~~~~~~~~
|
|
653 { dg-end-multiline-output "" } */
|
|
654 }
|
|
655
|
|
656 /* Other expressions. */
|
|
657
|
|
658 void test_address_of_label (void)
|
|
659 {
|
|
660 label:
|
|
661 __emit_expression_range (0, &&label ); /* { dg-warning "range" } */
|
|
662 /* { dg-begin-multiline-output "" }
|
|
663 __emit_expression_range (0, &&label );
|
|
664 ^~~~~~~
|
|
665 { dg-end-multiline-output "" } */
|
|
666 }
|
|
667
|
|
668 void test_transaction_expressions (void)
|
|
669 {
|
|
670 int i;
|
|
671 i = __transaction_atomic (42); /* { dg-error "without transactional memory support enabled" } */
|
|
672 /* { dg-begin-multiline-output "" }
|
|
673 i = __transaction_atomic (42);
|
|
674 ^~~~~~~~~~~~~~~~~~~~
|
|
675 { dg-end-multiline-output "" } */
|
|
676 i = __transaction_relaxed (42); /* { dg-error "without transactional memory support enabled" } */
|
|
677 /* { dg-begin-multiline-output "" }
|
|
678 i = __transaction_relaxed (42);
|
|
679 ^~~~~~~~~~~~~~~~~~~~~
|
|
680 { dg-end-multiline-output "" } */
|
|
681 }
|
|
682
|
|
683 void test_keywords (int i)
|
|
684 {
|
|
685 __emit_expression_range (0, __FUNCTION__[i] ); /* { dg-warning "range" } */
|
|
686 /* { dg-begin-multiline-output "" }
|
|
687 __emit_expression_range (0, __FUNCTION__[i] );
|
|
688 ~~~~~~~~~~~~~~^
|
|
689 { dg-end-multiline-output "" } */
|
|
690
|
|
691 __emit_expression_range (0, __PRETTY_FUNCTION__[i] ); /* { dg-warning "range" } */
|
|
692 /* { dg-begin-multiline-output "" }
|
|
693 __emit_expression_range (0, __PRETTY_FUNCTION__[i] );
|
|
694 ~~~~~~~~~~~~~~~~~~~~~^
|
|
695 { dg-end-multiline-output "" } */
|
|
696
|
|
697 __emit_expression_range (0, __func__[i] ); /* { dg-warning "range" } */
|
|
698 /* { dg-begin-multiline-output "" }
|
|
699 __emit_expression_range (0, __func__[i] );
|
|
700 ~~~~~~~~~~^
|
|
701 { dg-end-multiline-output "" } */
|
|
702 }
|
|
703
|
|
704 void test_builtin_va_arg (__builtin_va_list v)
|
|
705 {
|
|
706 __emit_expression_range (0, __builtin_va_arg (v, int) ); /* { dg-warning "range" } */
|
|
707 /* { dg-begin-multiline-output "" }
|
|
708 __emit_expression_range (0, __builtin_va_arg (v, int) );
|
|
709 ~~~~~~~~~~~~~~~~~~~~~^~~~
|
|
710 { dg-end-multiline-output "" } */
|
|
711
|
|
712 __emit_expression_range (0, __builtin_va_arg (v, int) + 1 ); /* { dg-warning "range" } */
|
|
713 /* { dg-begin-multiline-output "" }
|
|
714 __emit_expression_range (0, __builtin_va_arg (v, int) + 1 );
|
|
715 ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
|
|
716 { dg-end-multiline-output "" } */
|
|
717 }
|
|
718
|
|
719 struct s { int i; float f; };
|
|
720
|
|
721 void test_builtin_offsetof (int i)
|
|
722 {
|
131
|
723 __emit_expression_range (0, __builtin_offsetof (struct s, f) ); /* { dg-warning "range" } */
|
111
|
724 /* { dg-begin-multiline-output "" }
|
131
|
725 __emit_expression_range (0, __builtin_offsetof (struct s, f) );
|
|
726 ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
|
111
|
727 { dg-end-multiline-output "" } */
|
|
728 }
|
|
729
|
|
730 /* Examples of non-trivial expressions. ****************************/
|
|
731
|
|
732 extern double sqrt (double x);
|
|
733
|
|
734 void test_quadratic (double a, double b, double c)
|
|
735 {
|
|
736 __emit_expression_range (0, b * b - 4 * a * c ); /* { dg-warning "range" } */
|
|
737 /* { dg-begin-multiline-output "" }
|
|
738 __emit_expression_range (0, b * b - 4 * a * c );
|
|
739 ~~~~~~^~~~~~~~~~~
|
|
740 { dg-end-multiline-output "" } */
|
|
741
|
|
742 __emit_expression_range (0,
|
|
743 (-b + sqrt (b * b - 4 * a * c))
|
|
744 / (2 * a)); /* { dg-warning "range" } */
|
|
745 /* { dg-begin-multiline-output "" }
|
|
746 (-b + sqrt (b * b - 4 * a * c))
|
|
747 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
748 / (2 * a));
|
|
749 ^~~~~~~~~
|
|
750 { dg-end-multiline-output "" } */
|
|
751
|
|
752 }
|
|
753
|
|
754 int bar (int);
|
|
755 void test_combinations (int a)
|
|
756 {
|
|
757 __emit_expression_range (0, bar (a) > a ); /* { dg-warning "range" } */
|
|
758 /* { dg-begin-multiline-output "" }
|
|
759 __emit_expression_range (0, bar (a) > a );
|
|
760 ~~~~~~~~^~~
|
|
761 { dg-end-multiline-output "" } */
|
|
762 }
|
|
763
|
|
764 /* C++-specific expresssions. ****************************************/
|
|
765
|
|
766 void test_cp_literal_keywords (int a, int b)
|
|
767 {
|
|
768 this; /* { dg-error "invalid use of 'this' in non-member function" } */
|
|
769 /* { dg-begin-multiline-output "" }
|
|
770 this;
|
|
771 ^~~~
|
|
772 { dg-end-multiline-output "" } */
|
|
773
|
|
774 }
|
|
775
|
|
776 class base {
|
|
777 public:
|
|
778 base ();
|
|
779 base (int i);
|
|
780 virtual ~base ();
|
|
781 int pub ();
|
|
782 private:
|
|
783 int priv ();
|
|
784 };
|
|
785 class derived : public base { ~derived (); };
|
|
786
|
|
787 void test_cp_casts (base *ptr)
|
|
788 {
|
|
789 __emit_expression_range (0, dynamic_cast <derived *> (ptr)); /* { dg-warning "range" } */
|
|
790 /* { dg-begin-multiline-output "" }
|
|
791 __emit_expression_range (0, dynamic_cast <derived *> (ptr));
|
|
792 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
793 { dg-end-multiline-output "" } */
|
|
794
|
|
795 __emit_expression_range (0, static_cast <derived *> (ptr)); /* { dg-warning "range" } */
|
|
796 /* { dg-begin-multiline-output "" }
|
|
797 __emit_expression_range (0, static_cast <derived *> (ptr));
|
|
798 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
799 { dg-end-multiline-output "" } */
|
|
800
|
|
801 __emit_expression_range (0, reinterpret_cast <int *> (ptr)); /* { dg-warning "range" } */
|
|
802 /* { dg-begin-multiline-output "" }
|
|
803 __emit_expression_range (0, reinterpret_cast <int *> (ptr));
|
|
804 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
805 { dg-end-multiline-output "" } */
|
|
806
|
|
807 __emit_expression_range (0, const_cast <base *> (ptr)); /* { dg-warning "range" } */
|
|
808 /* { dg-begin-multiline-output "" }
|
|
809 __emit_expression_range (0, const_cast <base *> (ptr));
|
|
810 ^~~~~~~~~~~~~~~~~~~~~~~~~
|
|
811 { dg-end-multiline-output "" } */
|
|
812 }
|
|
813
|
|
814 void test_functional_casts (int i, float f)
|
|
815 {
|
|
816 __emit_expression_range (0, float(i)); /* { dg-warning "range" } */
|
|
817 /* { dg-begin-multiline-output "" }
|
|
818 __emit_expression_range (0, float(i));
|
|
819 ^~~~~~~~
|
|
820 { dg-end-multiline-output "" } */
|
|
821
|
|
822 __emit_expression_range (0, int(f)); /* { dg-warning "range" } */
|
|
823 /* { dg-begin-multiline-output "" }
|
|
824 __emit_expression_range (0, int(f));
|
|
825 ^~~~~~
|
|
826 { dg-end-multiline-output "" } */
|
|
827
|
|
828 __emit_expression_range (0, s{i, f}); /* { dg-warning "range" } */
|
|
829 /* { dg-begin-multiline-output "" }
|
|
830 __emit_expression_range (0, s{i, f});
|
|
831 ^~~~~~~
|
|
832 { dg-end-multiline-output "" } */
|
|
833 }
|
|
834
|
|
835 template <typename TYPENAME>
|
|
836 class example_template
|
|
837 {
|
|
838 public:
|
|
839 example_template (TYPENAME v);
|
|
840 };
|
|
841
|
|
842 void test_template_id (void)
|
|
843 {
|
|
844 example_template <int>; /* { dg-warning "declaration does not declare anything" } */
|
|
845 /* { dg-begin-multiline-output "" }
|
|
846 example_template <int>;
|
|
847 ^~~~~~~~~~~~~~~~~~~~~~
|
|
848 { dg-end-multiline-output "" } */
|
|
849 }
|
|
850
|
|
851 void test_new (void)
|
|
852 {
|
|
853 __emit_expression_range (0, ::new base); /* { dg-warning "range" } */
|
|
854 /* { dg-begin-multiline-output "" }
|
|
855 __emit_expression_range (0, ::new base);
|
|
856 ^~~~~~~~~~
|
|
857 { dg-end-multiline-output "" } */
|
|
858
|
|
859 __emit_expression_range (0, new base); /* { dg-warning "range" } */
|
|
860 /* { dg-begin-multiline-output "" }
|
|
861 __emit_expression_range (0, new base);
|
|
862 ^~~~~~~~
|
|
863 { dg-end-multiline-output "" } */
|
|
864
|
|
865 __emit_expression_range (0, new (base)); /* { dg-warning "range" } */
|
|
866 /* { dg-begin-multiline-output "" }
|
|
867 __emit_expression_range (0, new (base));
|
|
868 ^~~~~~~~~~
|
|
869 { dg-end-multiline-output "" } */
|
|
870
|
|
871 __emit_expression_range (0, new base (42)); /* { dg-warning "range" } */
|
|
872 /* { dg-begin-multiline-output "" }
|
|
873 __emit_expression_range (0, new base (42));
|
|
874 ^~~~~~~~~~~~~
|
|
875 { dg-end-multiline-output "" } */
|
|
876
|
|
877 __emit_expression_range (0, new (base) (42)); /* { dg-warning "range" } */
|
|
878 /* { dg-begin-multiline-output "" }
|
|
879 __emit_expression_range (0, new (base) (42));
|
|
880 ^~~~~~~~~~~~~~~
|
|
881 { dg-end-multiline-output "" } */
|
|
882
|
|
883 /* TODO: placement new. */
|
|
884
|
|
885 __emit_expression_range (0, new example_template<int> (42)); /* { dg-warning "range" } */
|
|
886 /* { dg-begin-multiline-output "" }
|
|
887 __emit_expression_range (0, new example_template<int> (42));
|
|
888 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
889 { dg-end-multiline-output "" } */
|
|
890 }
|
|
891
|
|
892 void test_methods ()
|
|
893 {
|
|
894 __emit_expression_range (0, ((base *)1)->pub () ); /* { dg-warning "range" } */
|
|
895 /* { dg-begin-multiline-output "" }
|
|
896 __emit_expression_range (0, ((base *)1)->pub () );
|
|
897 ~~~~~~~~~~~~~~~~~^~
|
|
898 { dg-end-multiline-output "" } */
|
|
899
|
|
900 ((base *)1)->priv (); // { dg-error " is private " }
|
|
901 /* { dg-begin-multiline-output "" }
|
|
902 ((base *)1)->priv ();
|
|
903 ^
|
|
904 { dg-end-multiline-output "" }
|
|
905 { dg-begin-multiline-output "" }
|
|
906 int priv ();
|
|
907 ^~~~
|
|
908 { dg-end-multiline-output "" } */
|
|
909 }
|
|
910
|
|
911 class tests
|
|
912 {
|
|
913 public:
|
|
914 void test_method_calls ();
|
|
915 int some_method () const;
|
|
916 };
|
|
917
|
|
918 void
|
|
919 tests::test_method_calls ()
|
|
920 {
|
|
921 __emit_expression_range (0, this->some_method () ); /* { dg-warning "range" } */
|
|
922 /* { dg-begin-multiline-output "" }
|
|
923 __emit_expression_range (0, this->some_method () );
|
|
924 ~~~~~~~~~~~~~~~~~~^~
|
|
925 { dg-end-multiline-output "" } */
|
|
926 }
|
|
927
|
|
928 namespace std
|
|
929 {
|
|
930 class type_info { public: int foo; };
|
|
931 }
|
|
932
|
|
933 void test_typeid (int i)
|
|
934 {
|
131
|
935 __emit_expression_range (0, typeid(i)); /* { dg-warning "range" } */
|
111
|
936 /* { dg-begin-multiline-output "" }
|
131
|
937 __emit_expression_range (0, typeid(i));
|
|
938 ^~~~~~~~~
|
111
|
939 { dg-end-multiline-output "" } */
|
|
940
|
131
|
941 __emit_expression_range (0, typeid(int)); /* { dg-warning "range" } */
|
111
|
942 /* { dg-begin-multiline-output "" }
|
131
|
943 __emit_expression_range (0, typeid(int));
|
|
944 ^~~~~~~~~~~
|
111
|
945 { dg-end-multiline-output "" } */
|
|
946
|
131
|
947 __emit_expression_range (0, typeid(i * 2)); /* { dg-warning "range" } */
|
111
|
948 /* { dg-begin-multiline-output "" }
|
131
|
949 __emit_expression_range (0, typeid(i * 2));
|
|
950 ^~~~~~~~~~~~~
|
111
|
951 { dg-end-multiline-output "" } */
|
|
952 }
|
|
953
|
|
954 /* Various tests of locations involving macros. */
|
|
955
|
|
956 void test_within_macro_1 (int lhs, int rhs)
|
|
957 {
|
|
958 #define MACRO_1(EXPR) EXPR
|
|
959
|
|
960 __emit_expression_range (0, MACRO_1 (lhs == rhs));
|
|
961
|
|
962 /* { dg-warning "range" "" { target *-*-* } .-2 } */
|
|
963 /* { dg-begin-multiline-output "" }
|
|
964 __emit_expression_range (0, MACRO_1 (lhs == rhs));
|
|
965 ~~~~^~~~~~
|
|
966 { dg-end-multiline-output "" } */
|
|
967 /* { dg-begin-multiline-output "" }
|
|
968 #define MACRO_1(EXPR) EXPR
|
|
969 ^~~~
|
|
970 { dg-end-multiline-output "" } */
|
|
971
|
|
972 #undef MACRO_1
|
|
973 }
|
|
974
|
|
975 void test_within_macro_2 (int lhs, int rhs)
|
|
976 {
|
|
977 #define MACRO_2(EXPR) EXPR
|
|
978
|
|
979 __emit_expression_range (0, MACRO_2 (MACRO_2 (lhs == rhs)));
|
|
980
|
|
981 /* { dg-warning "range" "" { target *-*-* } .-2 } */
|
|
982 /* { dg-begin-multiline-output "" }
|
|
983 __emit_expression_range (0, MACRO_2 (MACRO_2 (lhs == rhs)));
|
|
984 ~~~~^~~~~~
|
|
985 { dg-end-multiline-output "" } */
|
|
986 /* { dg-begin-multiline-output "" }
|
|
987 __emit_expression_range (0, MACRO_2 (MACRO_2 (lhs == rhs)));
|
|
988 ^~~~~~~
|
|
989 { dg-end-multiline-output "" } */
|
|
990 /* { dg-begin-multiline-output "" }
|
|
991 #define MACRO_2(EXPR) EXPR
|
|
992 ^~~~
|
|
993 { dg-end-multiline-output "" } */
|
|
994
|
|
995 #undef MACRO_2
|
|
996 }
|
|
997
|
|
998 void test_within_macro_3 (int lhs, int rhs)
|
|
999 {
|
|
1000 #define MACRO_3(EXPR) EXPR
|
|
1001
|
|
1002 __emit_expression_range (0, MACRO_3 (lhs) == MACRO_3 (rhs));
|
|
1003
|
|
1004 /* { dg-warning "range" "" { target *-*-* } .-2 } */
|
|
1005 /* { dg-begin-multiline-output "" }
|
|
1006 __emit_expression_range (0, MACRO_3 (lhs) == MACRO_3 (rhs));
|
|
1007 ^
|
|
1008 { dg-end-multiline-output "" } */
|
|
1009
|
|
1010 #undef MACRO_3
|
|
1011 }
|
|
1012
|
|
1013 void test_within_macro_4 (int lhs, int rhs)
|
|
1014 {
|
|
1015 #define MACRO_4(EXPR) EXPR
|
|
1016
|
|
1017 __emit_expression_range (0, MACRO_4 (MACRO_4 (lhs) == MACRO_4 (rhs)));
|
|
1018
|
|
1019 /* { dg-warning "range" "" { target *-*-* } .-2 } */
|
|
1020 /* { dg-begin-multiline-output "" }
|
|
1021 __emit_expression_range (0, MACRO_4 (MACRO_4 (lhs) == MACRO_4 (rhs)));
|
|
1022 ^
|
|
1023 { dg-end-multiline-output "" } */
|
|
1024 /* { dg-begin-multiline-output "" }
|
|
1025 #define MACRO_4(EXPR) EXPR
|
|
1026 ^~~~
|
|
1027 { dg-end-multiline-output "" } */
|
|
1028
|
|
1029 #undef MACRO_4
|
|
1030 }
|