diff options
author | Anastasia Stulova <anastasia.stulova@arm.com> | 2019-03-26 11:22:37 +0000 |
---|---|---|
committer | Anastasia Stulova <anastasia.stulova@arm.com> | 2019-03-26 11:22:37 +0000 |
commit | f671b140e870f928f1313421b65acff37b8b92ca (patch) | |
tree | c2100bf0d7e411f04d6a1bf1e238326db51cb64e | |
parent | f469a1cb81189ebb874b4a3317a41bd3af743fde (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.td | 4 | ||||
-rw-r--r-- | lib/Lex/PPDirectives.cpp | 3 | ||||
-rw-r--r-- | test/Misc/warning-flags.c | 2 | ||||
-rw-r--r-- | test/Preprocessor/macro_variadic.cl | 21 |
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); +} |