summaryrefslogtreecommitdiffstats
path: root/test/Preprocessor/_Pragma-in-macro-arg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/Preprocessor/_Pragma-in-macro-arg.cpp')
-rw-r--r--test/Preprocessor/_Pragma-in-macro-arg.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/test/Preprocessor/_Pragma-in-macro-arg.cpp b/test/Preprocessor/_Pragma-in-macro-arg.cpp
new file mode 100644
index 0000000000..0d2dcd0512
--- /dev/null
+++ b/test/Preprocessor/_Pragma-in-macro-arg.cpp
@@ -0,0 +1,22 @@
+// RUN: %clang_cc1 %s -verify -Wconversion
+
+#define P(X) _Pragma(#X)
+#define V(X) X
+
+#define X \
+ P(clang diagnostic push) \
+ P(clang diagnostic ignored "-Wconversion") \
+ ) = 1.2; \
+ P(clang diagnostic pop)
+
+void f() {
+ int a = 1.2; // expected-warning {{changes value}}
+
+ // Note, we intentionally enter a tentatively-parsed context here to trigger
+ // regular use of lookahead. This would go wrong if _Pragma checking in macro
+ // argument pre-expansion also tries to use token lookahead.
+ int (b
+ V(X)
+
+ int c = 1.2; // expected-warning {{changes value}}
+}