summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnastasia Stulova <anastasia.stulova@arm.com>2019-03-26 11:22:37 +0000
committerAnastasia Stulova <anastasia.stulova@arm.com>2019-03-26 11:22:37 +0000
commitf671b140e870f928f1313421b65acff37b8b92ca (patch)
treec2100bf0d7e411f04d6a1bf1e238326db51cb64e
parentf469a1cb81189ebb874b4a3317a41bd3af743fde (diff)
[OpenCL] Allow variadic macros as Clang feature.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@356987 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Basic/DiagnosticLexKinds.td4
-rw-r--r--lib/Lex/PPDirectives.cpp3
-rw-r--r--test/Misc/warning-flags.c2
-rw-r--r--test/Preprocessor/macro_variadic.cl21
4 files changed, 23 insertions, 7 deletions
diff --git a/include/clang/Basic/DiagnosticLexKinds.td b/include/clang/Basic/DiagnosticLexKinds.td
index 48d9551d68..bebd4551bc 100644
--- a/include/clang/Basic/DiagnosticLexKinds.td
+++ b/include/clang/Basic/DiagnosticLexKinds.td
@@ -395,8 +395,8 @@ def warn_cxx98_compat_empty_fnmacro_arg : Warning<
def note_macro_here : Note<"macro %0 defined here">;
def note_macro_expansion_here : Note<"expansion of macro %0 requested here">;
-def err_pp_opencl_variadic_macros :
- Error<"variadic macros not supported in OpenCL">;
+def ext_pp_opencl_variadic_macros : Extension<
+ "variadic macros are a Clang extension in OpenCL">;
def err_pp_invalid_directive : Error<"invalid preprocessing directive">;
def err_pp_directive_required : Error<
diff --git a/lib/Lex/PPDirectives.cpp b/lib/Lex/PPDirectives.cpp
index 1850af9cfa..16d61c70a0 100644
--- a/lib/Lex/PPDirectives.cpp
+++ b/lib/Lex/PPDirectives.cpp
@@ -2181,8 +2181,7 @@ bool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {
// OpenCL v1.2 s6.9.e: variadic macros are not supported.
if (LangOpts.OpenCL) {
- Diag(Tok, diag::err_pp_opencl_variadic_macros);
- return true;
+ Diag(Tok, diag::ext_pp_opencl_variadic_macros);
}
// Lex the token after the identifier.
diff --git a/test/Misc/warning-flags.c b/test/Misc/warning-flags.c
index 05172b2208..81d332cacd 100644
--- a/test/Misc/warning-flags.c
+++ b/test/Misc/warning-flags.c
@@ -96,4 +96,4 @@ CHECK-NEXT: warn_weak_import
The list of warnings in -Wpedantic should NEVER grow.
-CHECK: Number in -Wpedantic (not covered by other -W flags): 27
+CHECK: Number in -Wpedantic (not covered by other -W flags): 28
diff --git a/test/Preprocessor/macro_variadic.cl b/test/Preprocessor/macro_variadic.cl
index e4c5566244..cc9458da55 100644
--- a/test/Preprocessor/macro_variadic.cl
+++ b/test/Preprocessor/macro_variadic.cl
@@ -1,3 +1,20 @@
-// RUN: %clang_cc1 -verify %s
+// RUN: %clang_cc1 -verify %s -cl-std=CL1.2
+// RUN: %clang_cc1 -verify %s -pedantic -DPEDANTIC -cl-std=CL1.2
-#define X(...) 1 // expected-error {{variadic macros not supported in OpenCL}}
+
+#define NO_VAR_FUNC(...) 5
+#define VAR_FUNC(...) func(__VA_ARGS__);
+#define VAR_PRINTF(str, ...) printf(str, __VA_ARGS__);
+#ifdef PEDANTIC
+// expected-warning@-4{{variadic macros are a Clang extension in OpenCL}}
+// expected-warning@-4{{variadic macros are a Clang extension in OpenCL}}
+// expected-warning@-4{{variadic macros are a Clang extension in OpenCL}}
+#endif
+
+int printf(__constant const char *st, ...);
+
+void foo() {
+ NO_VAR_FUNC(1, 2, 3);
+ VAR_FUNC(1, 2, 3); //expected-error{{implicit declaration of function 'func' is invalid in OpenCL}}
+ VAR_PRINTF("%i", 1);
+}