blob: 4a0b3041375d7a7f816d46a006656cff25a0877b [file] [log] [blame]
/* 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 "" } */