[PATCH] D59492: [OpenCL] Allow variadic macros as Clang feature
Anastasia Stulova via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 18 08:07:53 PDT 2019
Anastasia updated this revision to Diff 191094.
Anastasia added a comment.
Fixed comment
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D59492/new/
https://reviews.llvm.org/D59492
Files:
docs/UsersManual.rst
include/clang/Basic/DiagnosticLexKinds.td
lib/Lex/PPDirectives.cpp
test/Preprocessor/macro_variadic.cl
test/SemaOpenCL/func.cl
Index: test/SemaOpenCL/func.cl
===================================================================
--- test/SemaOpenCL/func.cl
+++ test/SemaOpenCL/func.cl
@@ -1,5 +1,10 @@
// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -triple spir-unknown-unknown
+// Variadic macros
+#define NO_VAR_FUNC(...) 5
+#define VAR_FUNC(...) func(__VA_ARGS__);
+#define VAR_PRINTF(str, ...) printf(str, __VA_ARGS__);
+
// Variadic functions
void vararg_f(int, ...); // expected-error {{invalid prototype, variadic arguments are not allowed in OpenCL}}
void __vararg_f(int, ...);
@@ -33,4 +38,8 @@
// just calling a function is correct
foo(0);
+
+ 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);
}
Index: test/Preprocessor/macro_variadic.cl
===================================================================
--- test/Preprocessor/macro_variadic.cl
+++ /dev/null
@@ -1,3 +0,0 @@
-// RUN: %clang_cc1 -verify %s
-
-#define X(...) 1 // expected-error {{variadic macros not supported in OpenCL}}
Index: lib/Lex/PPDirectives.cpp
===================================================================
--- lib/Lex/PPDirectives.cpp
+++ lib/Lex/PPDirectives.cpp
@@ -2233,12 +2233,6 @@
diag::warn_cxx98_compat_variadic_macro :
diag::ext_variadic_macro);
- // OpenCL v1.2 s6.9.e: variadic macros are not supported.
- if (LangOpts.OpenCL) {
- Diag(Tok, diag::err_pp_opencl_variadic_macros);
- return true;
- }
-
// Lex the token after the identifier.
LexUnexpandedToken(Tok);
if (Tok.isNot(tok::r_paren)) {
Index: include/clang/Basic/DiagnosticLexKinds.td
===================================================================
--- include/clang/Basic/DiagnosticLexKinds.td
+++ include/clang/Basic/DiagnosticLexKinds.td
@@ -393,9 +393,6 @@
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 err_pp_invalid_directive : Error<"invalid preprocessing directive">;
def err_pp_directive_required : Error<
"%0 must be used within a preprocessing directive">;
Index: docs/UsersManual.rst
===================================================================
--- docs/UsersManual.rst
+++ docs/UsersManual.rst
@@ -2734,6 +2734,14 @@
enqueue query functions from `section 6.13.17.5
<https://www.khronos.org/registry/cl/specs/opencl-2.0-openclc.pdf#171>`_.
+Differences from various standard modes
+---------------------------------------
+
+All OpenCL standards:
+
+- Clang accepts variadic macros.
+
+
.. _target_features:
Target-Specific Features and Limitations
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D59492.191094.patch
Type: text/x-patch
Size: 2830 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190318/09fd377d/attachment.bin>
More information about the cfe-commits
mailing list