1 /* { dg-do compile } */
2 /* { dg-options "-O -fdiagnostics-show-caret -fpermissive" } */
4 /* This is a collection of unittests to verify that we're correctly
5 capturing the source code ranges of various kinds of expression.
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.
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. */
18 extern void __emit_expression_range (int dummy, ...);
22 void test_parentheses (int a, int b)
24 __emit_expression_range (0, (a + b) ); /* { dg-warning "range" } */
25 /* { dg-begin-multiline-output "" }
26 __emit_expression_range (0, (a + b) );
28 { dg-end-multiline-output "" } */
30 __emit_expression_range (0, (a + b) * (a - b) ); /* { dg-warning "range" } */
31 /* { dg-begin-multiline-output "" }
32 __emit_expression_range (0, (a + b) * (a - b) );
34 { dg-end-multiline-output "" } */
36 __emit_expression_range (0, !(a && b) ); /* { dg-warning "range" } */
37 /* { dg-begin-multiline-output "" }
38 __emit_expression_range (0, !(a && b) );
40 { dg-end-multiline-output "" } */
43 /* Postfix expressions. ************************************************/
45 void test_array_reference (int *arr)
47 __emit_expression_range (0, arr[100] ); /* { dg-warning "range" } */
48 /* { dg-begin-multiline-output "" }
49 __emit_expression_range (0, arr[100] );
51 { dg-end-multiline-output "" } */
54 int test_function_call (int p, int q, int r)
56 __emit_expression_range (0, test_function_call (p, q, r) ); /* { dg-warning "range" } */
57 /* { dg-begin-multiline-output "" }
58 __emit_expression_range (0, test_function_call (p, q, r) );
59 ~~~~~~~~~~~~~~~~~~~^~~~~~~~~
60 { dg-end-multiline-output "" } */
69 int test_structure_references (struct test_struct *ptr)
71 struct test_struct local;
74 __emit_expression_range (0, local.field ); /* { dg-warning "range" } */
75 /* { dg-begin-multiline-output "" }
76 __emit_expression_range (0, local.field );
78 { dg-end-multiline-output "" } */
80 __emit_expression_range (0, ptr->field ); /* { dg-warning "range" } */
81 /* { dg-begin-multiline-output "" }
82 __emit_expression_range (0, ptr->field );
84 { dg-end-multiline-output "" } */
87 int test_postfix_incdec (int i)
89 __emit_expression_range (0, i++ ); /* { dg-warning "range" } */
90 /* { dg-begin-multiline-output "" }
91 __emit_expression_range (0, i++ );
93 { dg-end-multiline-output "" } */
95 __emit_expression_range (0, i-- ); /* { dg-warning "range" } */
96 /* { dg-begin-multiline-output "" }
97 __emit_expression_range (0, i-- );
99 { dg-end-multiline-output "" } */
102 /* Unary operators. ****************************************************/
104 int test_sizeof (int i)
106 __emit_expression_range (0, sizeof(int) + i); /* { dg-warning "range" } */
107 /* { dg-begin-multiline-output "" }
108 __emit_expression_range (0, sizeof(int) + i);
110 { dg-end-multiline-output "" } */
112 __emit_expression_range (0, i + sizeof(int)); /* { dg-warning "range" } */
113 /* { dg-begin-multiline-output "" }
114 __emit_expression_range (0, i + sizeof(int));
116 { dg-end-multiline-output "" } */
118 __emit_expression_range (0, sizeof i + i); /* { dg-warning "range" } */
119 /* { dg-begin-multiline-output "" }
120 __emit_expression_range (0, sizeof i + i);
122 { dg-end-multiline-output "" } */
124 __emit_expression_range (0, i + sizeof i); /* { dg-warning "range" } */
125 /* { dg-begin-multiline-output "" }
126 __emit_expression_range (0, i + sizeof i);
128 { dg-end-multiline-output "" } */
131 int test_alignof (int i)
133 __emit_expression_range (0, alignof(int) + i); /* { dg-warning "range" } */
134 /* { dg-begin-multiline-output "" }
135 __emit_expression_range (0, alignof(int) + i);
137 { dg-end-multiline-output "" } */
139 __emit_expression_range (0, i + alignof(int)); /* { dg-warning "range" } */
140 /* { dg-begin-multiline-output "" }
141 __emit_expression_range (0, i + alignof(int));
143 { dg-end-multiline-output "" } */
145 __emit_expression_range (0, __alignof__(int) + i); /* { dg-warning "range" } */
146 /* { dg-begin-multiline-output "" }
147 __emit_expression_range (0, __alignof__(int) + i);
149 { dg-end-multiline-output "" } */
151 __emit_expression_range (0, i + __alignof__(int)); /* { dg-warning "range" } */
152 /* { dg-begin-multiline-output "" }
153 __emit_expression_range (0, i + __alignof__(int));
155 { dg-end-multiline-output "" } */
157 __emit_expression_range (0, __alignof__ i + i); /* { dg-warning "range" } */
158 /* { dg-begin-multiline-output "" }
159 __emit_expression_range (0, __alignof__ i + i);
161 { dg-end-multiline-output "" } */
163 __emit_expression_range (0, i + __alignof__ i); /* { dg-warning "range" } */
164 /* { dg-begin-multiline-output "" }
165 __emit_expression_range (0, i + __alignof__ i);
167 { dg-end-multiline-output "" } */
170 int test_prefix_incdec (int i)
172 __emit_expression_range (0, ++i ); /* { dg-warning "range" } */
173 /* { dg-begin-multiline-output "" }
174 __emit_expression_range (0, ++i );
176 { dg-end-multiline-output "" } */
178 __emit_expression_range (0, --i ); /* { dg-warning "range" } */
179 /* { dg-begin-multiline-output "" }
180 __emit_expression_range (0, --i );
182 { dg-end-multiline-output "" } */
185 void test_address_operator (void)
187 __emit_expression_range (0, &global ); /* { dg-warning "range" } */
188 /* { dg-begin-multiline-output "" }
189 __emit_expression_range (0, &global );
191 { dg-end-multiline-output "" } */
194 void test_indirection (int *ptr)
196 __emit_expression_range (0, *ptr ); /* { dg-warning "range" } */
197 /* { dg-begin-multiline-output "" }
198 __emit_expression_range (0, *ptr );
200 { dg-end-multiline-output "" } */
203 void test_unary_minus (int i)
205 __emit_expression_range (0, -i ); /* { dg-warning "range" } */
206 /* { dg-begin-multiline-output "" }
207 __emit_expression_range (0, -i );
209 { dg-end-multiline-output "" } */
212 void test_ones_complement (int i)
214 __emit_expression_range (0, ~i ); /* { dg-warning "range" } */
215 /* { dg-begin-multiline-output "" }
216 __emit_expression_range (0, ~i );
218 { dg-end-multiline-output "" } */
221 void test_logical_negation (int flag)
223 __emit_expression_range (0, !flag ); /* { dg-warning "range" } */
224 /* { dg-begin-multiline-output "" }
225 __emit_expression_range (0, !flag );
227 { dg-end-multiline-output "" } */
230 /* Casts. ****************************************************/
232 void test_cast (void *ptr)
234 __emit_expression_range (0, (int *)ptr ); /* { dg-warning "range" } */
235 /* { dg-begin-multiline-output "" }
236 __emit_expression_range (0, (int *)ptr );
238 { dg-end-multiline-output "" } */
240 __emit_expression_range (0, *(int *)0xdeadbeef ); /* { dg-warning "range" } */
241 /* { dg-begin-multiline-output "" }
242 __emit_expression_range (0, *(int *)0xdeadbeef );
244 { dg-end-multiline-output "" } */
248 /* Binary operators. *******************************************/
250 void test_multiplicative_operators (int lhs, int rhs)
252 __emit_expression_range (0, lhs * rhs ); /* { dg-warning "range" } */
253 /* { dg-begin-multiline-output "" }
254 __emit_expression_range (0, lhs * rhs );
256 { dg-end-multiline-output "" } */
258 __emit_expression_range (0, lhs / rhs ); /* { dg-warning "range" } */
259 /* { dg-begin-multiline-output "" }
260 __emit_expression_range (0, lhs / rhs );
262 { dg-end-multiline-output "" } */
264 __emit_expression_range (0, lhs % rhs ); /* { dg-warning "range" } */
265 /* { dg-begin-multiline-output "" }
266 __emit_expression_range (0, lhs % rhs );
268 { dg-end-multiline-output "" } */
271 void test_additive_operators (int lhs, int rhs)
273 __emit_expression_range (0, lhs + rhs ); /* { dg-warning "range" } */
274 /* { dg-begin-multiline-output "" }
275 __emit_expression_range (0, lhs + rhs );
277 { dg-end-multiline-output "" } */
279 __emit_expression_range (0, lhs - rhs ); /* { dg-warning "range" } */
280 /* { dg-begin-multiline-output "" }
281 __emit_expression_range (0, lhs - rhs );
283 { dg-end-multiline-output "" } */
286 void test_shift_operators (int lhs, int rhs)
288 __emit_expression_range (0, lhs << rhs ); /* { dg-warning "range" } */
289 /* { dg-begin-multiline-output "" }
290 __emit_expression_range (0, lhs << rhs );
292 { dg-end-multiline-output "" } */
294 __emit_expression_range (0, lhs >> rhs ); /* { dg-warning "range" } */
295 /* { dg-begin-multiline-output "" }
296 __emit_expression_range (0, lhs >> rhs );
298 { dg-end-multiline-output "" } */
301 void test_relational_operators (int lhs, int rhs)
303 __emit_expression_range (0, lhs < rhs ); /* { dg-warning "range" } */
304 /* { dg-begin-multiline-output "" }
305 __emit_expression_range (0, lhs < rhs );
307 { dg-end-multiline-output "" } */
309 __emit_expression_range (0, lhs > rhs ); /* { dg-warning "range" } */
310 /* { dg-begin-multiline-output "" }
311 __emit_expression_range (0, lhs > rhs );
313 { dg-end-multiline-output "" } */
315 __emit_expression_range (0, lhs <= rhs ); /* { dg-warning "range" } */
316 /* { dg-begin-multiline-output "" }
317 __emit_expression_range (0, lhs <= rhs );
319 { dg-end-multiline-output "" } */
321 __emit_expression_range (0, lhs >= rhs ); /* { dg-warning "range" } */
322 /* { dg-begin-multiline-output "" }
323 __emit_expression_range (0, lhs >= rhs );
325 { dg-end-multiline-output "" } */
328 void test_equality_operators (int lhs, int rhs)
330 __emit_expression_range (0, lhs == rhs ); /* { dg-warning "range" } */
331 /* { dg-begin-multiline-output "" }
332 __emit_expression_range (0, lhs == rhs );
334 { dg-end-multiline-output "" } */
336 __emit_expression_range (0, lhs != rhs ); /* { dg-warning "range" } */
337 /* { dg-begin-multiline-output "" }
338 __emit_expression_range (0, lhs != rhs );
340 { dg-end-multiline-output "" } */
343 void test_bitwise_binary_operators (int lhs, int rhs)
345 __emit_expression_range (0, lhs & rhs ); /* { dg-warning "range" } */
346 /* { dg-begin-multiline-output "" }
347 __emit_expression_range (0, lhs & rhs );
349 { dg-end-multiline-output "" } */
351 __emit_expression_range (0, lhs ^ rhs ); /* { dg-warning "range" } */
352 /* { dg-begin-multiline-output "" }
353 __emit_expression_range (0, lhs ^ rhs );
355 { dg-end-multiline-output "" } */
357 __emit_expression_range (0, lhs | rhs ); /* { dg-warning "range" } */
358 /* { dg-begin-multiline-output "" }
359 __emit_expression_range (0, lhs | rhs );
361 { dg-end-multiline-output "" } */
364 void test_logical_operators (int lhs, int rhs)
366 __emit_expression_range (0, lhs && rhs ); /* { dg-warning "range" } */
367 /* { dg-begin-multiline-output "" }
368 __emit_expression_range (0, lhs && rhs );
370 { dg-end-multiline-output "" } */
372 __emit_expression_range (0, lhs || rhs ); /* { dg-warning "range" } */
373 /* { dg-begin-multiline-output "" }
374 __emit_expression_range (0, lhs || rhs );
376 { dg-end-multiline-output "" } */
379 /* Conditional operator. *******************************************/
381 void test_conditional_operators (int flag, int on_true, int on_false)
383 __emit_expression_range (0, flag ? on_true : on_false ); /* { dg-warning "range" } */
384 /* { dg-begin-multiline-output "" }
385 __emit_expression_range (0, flag ? on_true : on_false );
386 ~~~~~^~~~~~~~~~~~~~~~~~~~
387 { dg-end-multiline-output "" } */
390 /* Assignment expressions. *******************************************/
392 void test_assignment_expressions (int dest, int other)
394 __emit_expression_range (0, dest = other ); /* { dg-warning "range" } */
395 /* { dg-begin-multiline-output "" }
396 __emit_expression_range (0, dest = other );
398 { dg-end-multiline-output "" } */
400 __emit_expression_range (0, dest *= other ); /* { dg-warning "range" } */
401 /* { dg-begin-multiline-output "" }
402 __emit_expression_range (0, dest *= other );
404 { dg-end-multiline-output "" } */
406 __emit_expression_range (0, dest /= other ); /* { dg-warning "range" } */
407 /* { dg-begin-multiline-output "" }
408 __emit_expression_range (0, dest /= other );
410 { dg-end-multiline-output "" } */
412 __emit_expression_range (0, dest %= other ); /* { dg-warning "range" } */
413 /* { dg-begin-multiline-output "" }
414 __emit_expression_range (0, dest %= other );
416 { dg-end-multiline-output "" } */
418 __emit_expression_range (0, dest += other ); /* { dg-warning "range" } */
419 /* { dg-begin-multiline-output "" }
420 __emit_expression_range (0, dest += other );
422 { dg-end-multiline-output "" } */
424 __emit_expression_range (0, dest -= other ); /* { dg-warning "range" } */
425 /* { dg-begin-multiline-output "" }
426 __emit_expression_range (0, dest -= other );
428 { dg-end-multiline-output "" } */
430 __emit_expression_range (0, dest <<= other ); /* { dg-warning "range" } */
431 /* { dg-begin-multiline-output "" }
432 __emit_expression_range (0, dest <<= other );
434 { dg-end-multiline-output "" } */
436 __emit_expression_range (0, dest >>= other ); /* { dg-warning "range" } */
437 /* { dg-begin-multiline-output "" }
438 __emit_expression_range (0, dest >>= other );
440 { dg-end-multiline-output "" } */
442 __emit_expression_range (0, dest &= other ); /* { dg-warning "range" } */
443 /* { dg-begin-multiline-output "" }
444 __emit_expression_range (0, dest &= other );
446 { dg-end-multiline-output "" } */
448 __emit_expression_range (0, dest ^= other ); /* { dg-warning "range" } */
449 /* { dg-begin-multiline-output "" }
450 __emit_expression_range (0, dest ^= other );
452 { dg-end-multiline-output "" } */
454 __emit_expression_range (0, dest |= other ); /* { dg-warning "range" } */
455 /* { dg-begin-multiline-output "" }
456 __emit_expression_range (0, dest |= other );
458 { dg-end-multiline-output "" } */
461 /* Comma operator. *******************************************/
463 void test_comma_operator (int a, int b)
465 __emit_expression_range (0, (a++, a + b) ); /* { dg-warning "range" } */
466 /* { dg-begin-multiline-output "" }
467 __emit_expression_range (0, (a++, a + b) );
469 { dg-end-multiline-output "" } */
472 /* Literals. **************************************************/
474 /* We can't test the ranges of literals directly, since the underlying
475 tree nodes don't retain a location. However, we can test that they
476 have ranges during parsing by building compound expressions using
477 them, and verifying the ranges of the compound expressions. */
479 void test_string_literals (int i)
481 __emit_expression_range (0, "foo"[i] ); /* { dg-warning "range" } */
482 /* { dg-begin-multiline-output "" }
483 __emit_expression_range (0, "foo"[i] );
485 { dg-end-multiline-output "" } */
487 __emit_expression_range (0, &"foo" "bar" ); /* { dg-warning "range" } */
488 /* { dg-begin-multiline-output "" }
489 __emit_expression_range (0, &"foo" "bar" );
491 { dg-end-multiline-output "" } */
494 void test_numeric_literals (int i)
496 __emit_expression_range (0, 42 + i ); /* { dg-warning "range" } */
497 /* { dg-begin-multiline-output "" }
498 __emit_expression_range (0, 42 + i );
500 { dg-end-multiline-output "" } */
502 __emit_expression_range (0, i + 42 ); /* { dg-warning "range" } */
503 /* { dg-begin-multiline-output "" }
504 __emit_expression_range (0, i + 42 );
506 { dg-end-multiline-output "" } */
508 /* Verify locations of negative literals (via folding of
511 __emit_expression_range (0, -42 + i ); /* { dg-warning "range" } */
512 /* { dg-begin-multiline-output "" }
513 __emit_expression_range (0, -42 + i );
515 { dg-end-multiline-output "" } */
517 __emit_expression_range (0, i + -42 ); /* { dg-warning "range" } */
518 /* { dg-begin-multiline-output "" }
519 __emit_expression_range (0, i + -42 );
521 { dg-end-multiline-output "" } */
523 __emit_expression_range (0, i ? 0 : -1 ); /* { dg-warning "range" } */
524 /* { dg-begin-multiline-output "" }
525 __emit_expression_range (0, i ? 0 : -1 );
527 { dg-end-multiline-output "" } */
530 /* Braced initializers. ***************************************/
532 /* We can't test the ranges of these directly, since the underlying
533 tree nodes don't retain a location. However, we can test that they
534 have ranges during parsing by building compound expressions using
535 them, and verifying the ranges of the compound expressions. */
537 #define vector(elcount, type) \
538 __attribute__((vector_size((elcount)*sizeof(type)))) type
540 void test_braced_init (void)
542 /* Verify start of range. */
543 __emit_expression_range (0, (vector(4, float)){2., 2., 2., 2.} + 1); /* { dg-warning "range" } */
544 /* { dg-begin-multiline-output "" }
545 __emit_expression_range (0, (vector(4, float)){2., 2., 2., 2.} + 1);
547 { dg-end-multiline-output "" } */
549 /* Verify end of range. */
550 __emit_expression_range (0, 1 + (vector(4, float)){2., 2., 2., 2.}); /* { dg-warning "range" } */
551 /* { dg-begin-multiline-output "" }
552 __emit_expression_range (0, 1 + (vector(4, float)){2., 2., 2., 2.});
553 ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
554 { dg-end-multiline-output "" } */
557 /* Statement expressions. ***************************************/
559 void test_statement_expression (void)
561 __emit_expression_range (0, ({ static int a; a; }) + 1); /* { dg-warning "range" } */
562 /* { dg-begin-multiline-output "" }
563 __emit_expression_range (0, ({ static int a; a; }) + 1);
564 ~~~~~~~~~~~~~~~~~~~~~~~^~~
565 { dg-end-multiline-output "" } */
567 __emit_expression_range (0, 1 + ({ static int a; a; }) ); /* { dg-warning "range" } */
568 /* { dg-begin-multiline-output "" }
569 __emit_expression_range (0, 1 + ({ static int a; a; }) );
570 ~~^~~~~~~~~~~~~~~~~~~~~~~~
571 { dg-end-multiline-output "" } */
574 /* Other expressions. */
576 void test_address_of_label (void)
579 __emit_expression_range (0, &&label ); /* { dg-warning "range" } */
580 /* { dg-begin-multiline-output "" }
581 __emit_expression_range (0, &&label );
583 { dg-end-multiline-output "" } */
586 void test_transaction_expressions (void)
589 i = __transaction_atomic (42); /* { dg-error "without transactional memory support enabled" } */
590 /* { dg-begin-multiline-output "" }
591 i = __transaction_atomic (42);
593 { dg-end-multiline-output "" } */
594 i = __transaction_relaxed (42); /* { dg-error "without transactional memory support enabled" } */
595 /* { dg-begin-multiline-output "" }
596 i = __transaction_relaxed (42);
597 ^~~~~~~~~~~~~~~~~~~~~
598 { dg-end-multiline-output "" } */
601 void test_keywords (int i)
603 __emit_expression_range (0, __FUNCTION__[i] ); /* { dg-warning "range" } */
604 /* { dg-begin-multiline-output "" }
605 __emit_expression_range (0, __FUNCTION__[i] );
607 { dg-end-multiline-output "" } */
609 __emit_expression_range (0, __PRETTY_FUNCTION__[i] ); /* { dg-warning "range" } */
610 /* { dg-begin-multiline-output "" }
611 __emit_expression_range (0, __PRETTY_FUNCTION__[i] );
612 ~~~~~~~~~~~~~~~~~~~~~^
613 { dg-end-multiline-output "" } */
615 __emit_expression_range (0, __func__[i] ); /* { dg-warning "range" } */
616 /* { dg-begin-multiline-output "" }
617 __emit_expression_range (0, __func__[i] );
619 { dg-end-multiline-output "" } */
622 void test_builtin_va_arg (__builtin_va_list v)
624 __emit_expression_range (0, __builtin_va_arg (v, int) ); /* { dg-warning "range" } */
625 /* { dg-begin-multiline-output "" }
626 __emit_expression_range (0, __builtin_va_arg (v, int) );
627 ~~~~~~~~~~~~~~~~~~~~~^~~~
628 { dg-end-multiline-output "" } */
630 __emit_expression_range (0, __builtin_va_arg (v, int) + 1 ); /* { dg-warning "range" } */
631 /* { dg-begin-multiline-output "" }
632 __emit_expression_range (0, __builtin_va_arg (v, int) + 1 );
633 ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
634 { dg-end-multiline-output "" } */
637 struct s { int i; float f; };
639 void test_builtin_offsetof (int i)
641 __emit_expression_range (0, i + __builtin_offsetof (struct s, f) ); /* { dg-warning "range" } */
642 /* { dg-begin-multiline-output "" }
643 __emit_expression_range (0, i + __builtin_offsetof (struct s, f) );
644 ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
645 { dg-end-multiline-output "" } */
647 __emit_expression_range (0, __builtin_offsetof (struct s, f) + i ); /* { dg-warning "range" } */
648 /* { dg-begin-multiline-output "" }
649 __emit_expression_range (0, __builtin_offsetof (struct s, f) + i );
650 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
651 { dg-end-multiline-output "" } */
654 /* Examples of non-trivial expressions. ****************************/
656 extern double sqrt (double x);
658 void test_quadratic (double a, double b, double c)
660 __emit_expression_range (0, b * b - 4 * a * c ); /* { dg-warning "range" } */
661 /* { dg-begin-multiline-output "" }
662 __emit_expression_range (0, b * b - 4 * a * c );
664 { dg-end-multiline-output "" } */
666 __emit_expression_range (0,
667 (-b + sqrt (b * b - 4 * a * c))
668 / (2 * a)); /* { dg-warning "range" } */
669 /* { dg-begin-multiline-output "" }
670 (-b + sqrt (b * b - 4 * a * c))
671 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
674 { dg-end-multiline-output "" } */
679 void test_combinations (int a)
681 __emit_expression_range (0, bar (a) > a ); /* { dg-warning "range" } */
682 /* { dg-begin-multiline-output "" }
683 __emit_expression_range (0, bar (a) > a );
685 { dg-end-multiline-output "" } */
688 /* C++-specific expresssions. ****************************************/
690 void test_cp_literal_keywords (int a, int b)
692 this; /* { dg-error "invalid use of 'this' in non-member function" } */
693 /* { dg-begin-multiline-output "" }
696 { dg-end-multiline-output "" } */
709 class derived : public base { ~derived (); };
711 void test_cp_casts (base *ptr)
713 __emit_expression_range (0, dynamic_cast <derived *> (ptr)); /* { dg-warning "range" } */
714 /* { dg-begin-multiline-output "" }
715 __emit_expression_range (0, dynamic_cast <derived *> (ptr));
716 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
717 { dg-end-multiline-output "" } */
719 __emit_expression_range (0, static_cast <derived *> (ptr)); /* { dg-warning "range" } */
720 /* { dg-begin-multiline-output "" }
721 __emit_expression_range (0, static_cast <derived *> (ptr));
722 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
723 { dg-end-multiline-output "" } */
725 __emit_expression_range (0, reinterpret_cast <int *> (ptr)); /* { dg-warning "range" } */
726 /* { dg-begin-multiline-output "" }
727 __emit_expression_range (0, reinterpret_cast <int *> (ptr));
728 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
729 { dg-end-multiline-output "" } */
731 __emit_expression_range (0, const_cast <base *> (ptr)); /* { dg-warning "range" } */
732 /* { dg-begin-multiline-output "" }
733 __emit_expression_range (0, const_cast <base *> (ptr));
734 ^~~~~~~~~~~~~~~~~~~~~~~~~
735 { dg-end-multiline-output "" } */
738 void test_functional_casts (int i, float f)
740 __emit_expression_range (0, float(i)); /* { dg-warning "range" } */
741 /* { dg-begin-multiline-output "" }
742 __emit_expression_range (0, float(i));
744 { dg-end-multiline-output "" } */
746 __emit_expression_range (0, int(f)); /* { dg-warning "range" } */
747 /* { dg-begin-multiline-output "" }
748 __emit_expression_range (0, int(f));
750 { dg-end-multiline-output "" } */
752 __emit_expression_range (0, s{i, f}); /* { dg-warning "range" } */
753 /* { dg-begin-multiline-output "" }
754 __emit_expression_range (0, s{i, f});
756 { dg-end-multiline-output "" } */
759 template <typename TYPENAME>
760 class example_template
763 example_template (TYPENAME v);
766 void test_template_id (void)
768 example_template <int>; /* { dg-warning "declaration does not declare anything" } */
769 /* { dg-begin-multiline-output "" }
770 example_template <int>;
771 ^~~~~~~~~~~~~~~~~~~~~~
772 { dg-end-multiline-output "" } */
777 __emit_expression_range (0, ::new base); /* { dg-warning "range" } */
778 /* { dg-begin-multiline-output "" }
779 __emit_expression_range (0, ::new base);
781 { dg-end-multiline-output "" } */
783 __emit_expression_range (0, new base); /* { dg-warning "range" } */
784 /* { dg-begin-multiline-output "" }
785 __emit_expression_range (0, new base);
787 { dg-end-multiline-output "" } */
789 __emit_expression_range (0, new (base)); /* { dg-warning "range" } */
790 /* { dg-begin-multiline-output "" }
791 __emit_expression_range (0, new (base));
793 { dg-end-multiline-output "" } */
795 __emit_expression_range (0, new base (42)); /* { dg-warning "range" } */
796 /* { dg-begin-multiline-output "" }
797 __emit_expression_range (0, new base (42));
799 { dg-end-multiline-output "" } */
801 __emit_expression_range (0, new (base) (42)); /* { dg-warning "range" } */
802 /* { dg-begin-multiline-output "" }
803 __emit_expression_range (0, new (base) (42));
805 { dg-end-multiline-output "" } */
807 /* TODO: placement new. */
809 __emit_expression_range (0, new example_template<int> (42)); /* { dg-warning "range" } */
810 /* { dg-begin-multiline-output "" }
811 __emit_expression_range (0, new example_template<int> (42));
812 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
813 { dg-end-multiline-output "" } */
818 __emit_expression_range (0, ((base *)1)->pub () ); /* { dg-warning "range" } */
819 /* { dg-begin-multiline-output "" }
820 __emit_expression_range (0, ((base *)1)->pub () );
822 { dg-end-multiline-output "" } */
824 ((base *)1)->priv (); // { dg-error " is private " }
825 /* { dg-begin-multiline-output "" }
826 ((base *)1)->priv ();
828 { dg-end-multiline-output "" }
829 { dg-begin-multiline-output "" }
832 { dg-end-multiline-output "" } */
838 void test_method_calls ();
839 int some_method () const;
843 tests::test_method_calls ()
845 __emit_expression_range (0, this->some_method () ); /* { dg-warning "range" } */
846 /* { dg-begin-multiline-output "" }
847 __emit_expression_range (0, this->some_method () );
849 { dg-end-multiline-output "" } */