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