Viewing file: pr97932.c (2.51 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* Verify that we don't emit ranges that span both a macro definition location and a macro expansion location. */
/* { dg-options "-fdiagnostics-show-caret" } */
/* Various cases involving the ranges of the LHS and RHS operands to "-". */
/* Case 1 start token is in macro definition ("&"), end token is in macro invocation ("a" and "b"). */
#define M1(A, B) &A - &B /* { dg-error "invalid operands" } */
/* Intervening material that ought not to be printed. */
int test_1 (float a, int b) { return M1(a, b); /* { dg-message "in expansion of macro 'M1'" } */ }
/* { dg-begin-multiline-output "" } #define M1(A, B) &A - &B ^ { dg-end-multiline-output "" } */ /* { dg-begin-multiline-output "" } return M1(a, b); ^~ { dg-end-multiline-output "" } */
/* Case 2: start and end tokens are both in macro invocation ("&", and "a"/"b"). */
#define M2(A, B) A - B /* { dg-error "invalid operands" } */
/* Intervening material that ought not to be printed. */
int test_2 (float a, int b) { return M2(&a, &b); /* { dg-message "in expansion of macro 'M2'" } */ }
/* { dg-begin-multiline-output "" } #define M2(A, B) A - B ^ { dg-end-multiline-output "" } */ /* { dg-begin-multiline-output "" } return M2(&a, &b); ^~ { dg-end-multiline-output "" } */
/* Case 3: start token is in macro invocation ("&"), end token is in macro definition ("a"). */
#define M3(OP) OP a - OP b /* { dg-error "invalid operands" } */
/* Intervening material that ought not to be printed. */
int test_3 (float a, int b) { return M3(&); /* { dg-message "in expansion of macro 'M3'" } */ }
/* { dg-begin-multiline-output "" } #define M3(OP) OP a - OP b ^ { dg-end-multiline-output "" } */ /* { dg-begin-multiline-output "" } return M3(&); ^~ { dg-end-multiline-output "" } */
/* Case 4: start and end tokens are both in macro definition ("&a"). */
#define M4 &a - &b /* { dg-error "invalid operands" } */
/* Intervening material that ought not to be printed. */
int test_4 (float a, int b) { return M4; /* { dg-message "in expansion of macro 'M4'" } */ }
/* { dg-begin-multiline-output "" } #define M4 &a - &b ~~ ^ ~~ | | | int * float * { dg-end-multiline-output "" } */ /* { dg-begin-multiline-output "" } return M4; ^~ { dg-end-multiline-output "" } */
|