blob: 9f42e268d9f11b507ff1557b006aafc81532839d [file] [log] [blame]
/* PR c/81448 */
/* { dg-do compile } */
/* { dg-options "-Wmultistatement-macros" } */
extern int i;
#define BAD4 i++; i++ /* { dg-warning "macro expands to multiple statements" } */
#define BAD5 i++; i++ /* { dg-warning "macro expands to multiple statements" } */
#define BAD6 i++; i++ /* { dg-warning "macro expands to multiple statements" } */
#define BAD7 i++; i++ /* { dg-warning "macro expands to multiple statements" } */
#define BAD8 i++; i++ /* { dg-warning "macro expands to multiple statements" } */
#define BAD9 i++; i++ /* { dg-warning "macro expands to multiple statements" } */
#define IF if (1) /* { dg-message "not guarded by this 'if' clause" } */
#define IF2 IF /* { dg-message "in expansion of macro .IF." } */
#define BADB7 BAD7 /* { dg-message "in expansion of macro .BAD7." } */
#define BADB8 BAD8 /* { dg-message "in expansion of macro .BAD8." } */
#define BADB9 BAD9 /* { dg-message "in expansion of macro .BAD9." } */
#define FN0 \
void fn0 (void) \
{ \
IF \
i++; \
return; \
}
#define FN1 \
void fn1 (void) \
{ \
IF2 \
i++; \
return; \
}
#define FN2 \
void fn2 (void) \
{ \
if (1) \
i++; \
return; \
}
#define TOP FN3
#define FN3 \
void fn3 (void) \
{ \
IF \
i++; \
return; \
}
#define TOP2 FN4 /* { dg-message "in expansion of macro .FN4." } */
#define FN4 \
void fn4 (void) \
{ \
IF2 /* { dg-message "in expansion of macro .IF2." } */ \
BAD4; /* { dg-message "in expansion of macro .BAD4." } */ \
}
#define FN5 \
void fn5 (void) \
{ \
IF /* { dg-message "in expansion of macro .IF." } */ \
BAD5; /* { dg-message "in expansion of macro .BAD5." } */ \
}
#define FN6 \
void fn6 (void) \
{ \
if (1) /* { dg-message "not guarded by this 'if' clause" } */ \
BAD6; /* { dg-message "in expansion of macro .BAD6." } */ \
}
#define FN7 \
void fn7 (void) \
{ \
if (1) /* { dg-message "not guarded by this 'if' clause" } */ \
BADB7; /* { dg-message "in expansion of macro .BADB7." } */ \
}
#define FN8 \
void fn8 (void) \
{ \
IF2 /* { dg-message "in expansion of macro .IF2." } */ \
BADB8; /* { dg-message "in expansion of macro .BADB8." } */ \
}
#define FN9 \
void fn9 (void) \
{ \
IF /* { dg-message "in expansion of macro .IF." } */ \
BADB9; /* { dg-message "in expansion of macro .BADB9." } */ \
}
FN0
FN1
FN2
TOP
TOP2 /* { dg-message "in expansion of macro .TOP2." } */
FN5 /* { dg-message "in expansion of macro .FN5." } */
FN6 /* { dg-message "in expansion of macro .FN6." } */
FN7 /* { dg-message "in expansion of macro .FN7." } */
FN8 /* { dg-message "in expansion of macro .FN8." } */
FN9 /* { dg-message "in expansion of macro .FN9." } */