| /* 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." } */ |