r356987 - [OpenCL] Allow variadic macros as Clang feature.

Anastasia Stulova via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 26 04:22:37 PDT 2019


Author: stulova
Date: Tue Mar 26 04:22:37 2019
New Revision: 356987

URL: http://llvm.org/viewvc/llvm-project?rev=356987&view=rev
Log:
[OpenCL] Allow variadic macros as Clang feature.


Modified:
    cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td
    cfe/trunk/lib/Lex/PPDirectives.cpp
    cfe/trunk/test/Misc/warning-flags.c
    cfe/trunk/test/Preprocessor/macro_variadic.cl

Modified: cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td?rev=356987&r1=356986&r2=356987&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td Tue Mar 26 04:22:37 2019
@@ -395,8 +395,8 @@ def warn_cxx98_compat_empty_fnmacro_arg
 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<

Modified: cfe/trunk/lib/Lex/PPDirectives.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPDirectives.cpp?rev=356987&r1=356986&r2=356987&view=diff
==============================================================================
--- cfe/trunk/lib/Lex/PPDirectives.cpp (original)
+++ cfe/trunk/lib/Lex/PPDirectives.cpp Tue Mar 26 04:22:37 2019
@@ -2181,8 +2181,7 @@ bool Preprocessor::ReadMacroParameterLis
 
       // 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.

Modified: cfe/trunk/test/Misc/warning-flags.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Misc/warning-flags.c?rev=356987&r1=356986&r2=356987&view=diff
==============================================================================
--- cfe/trunk/test/Misc/warning-flags.c (original)
+++ cfe/trunk/test/Misc/warning-flags.c Tue Mar 26 04:22:37 2019
@@ -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

Modified: cfe/trunk/test/Preprocessor/macro_variadic.cl
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/macro_variadic.cl?rev=356987&r1=356986&r2=356987&view=diff
==============================================================================
--- cfe/trunk/test/Preprocessor/macro_variadic.cl (original)
+++ cfe/trunk/test/Preprocessor/macro_variadic.cl Tue Mar 26 04:22:37 2019
@@ -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 at -4{{variadic macros are a Clang extension in OpenCL}}
+// expected-warning at -4{{variadic macros are a Clang extension in OpenCL}}
+// expected-warning at -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);
+}




More information about the cfe-commits mailing list