summaryrefslogtreecommitdiff
path: root/gcc/testsuite/c-c++-common/Wmultistatement-macros-13.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/c-c++-common/Wmultistatement-macros-13.c')
-rw-r--r--gcc/testsuite/c-c++-common/Wmultistatement-macros-13.c104
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." } */