diff options
Diffstat (limited to 'gcc/testsuite/c-c++-common/Wmultistatement-macros-13.c')
-rw-r--r-- | gcc/testsuite/c-c++-common/Wmultistatement-macros-13.c | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/gcc/testsuite/c-c++-common/Wmultistatement-macros-13.c b/gcc/testsuite/c-c++-common/Wmultistatement-macros-13.c new file mode 100644 index 00000000000..9f42e268d9f --- /dev/null +++ b/gcc/testsuite/c-c++-common/Wmultistatement-macros-13.c @@ -0,0 +1,104 @@ +/* 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." } */ |