[PATCH] D51411: [OpenCL] Improve diagnostic of argument in address space conversion builtins
Alistair Davies via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Sep 11 03:30:53 PDT 2018
AlistairD updated this revision to Diff 164835.
https://reviews.llvm.org/D51411
Files:
include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaChecking.cpp
test/SemaOpenCL/to_addr_builtin.cl
Index: test/SemaOpenCL/to_addr_builtin.cl
===================================================================
--- test/SemaOpenCL/to_addr_builtin.cl
+++ test/SemaOpenCL/to_addr_builtin.cl
@@ -1,5 +1,5 @@
// RUN: %clang_cc1 -verify -fsyntax-only %s
-// RUN: %clang_cc1 -verify -fsyntax-only -cl-std=CL2.0 %s
+// RUN: %clang_cc1 -Wconversion -verify -fsyntax-only -cl-std=CL2.0 %s
void test(void) {
global int *glob;
@@ -43,13 +43,15 @@
// expected-warning at -2{{incompatible integer to pointer conversion assigning to '__local int *' from 'int'}}
#else
// expected-error at -4{{assigning '__global int *' to '__local int *' changes address space of pointer}}
+ // expected-warning at -5{{passing non-generic address space pointer to to_global may cause dynamic conversion affecting performance}}
#endif
global char *glob_c = to_global(loc);
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
// expected-warning at -2{{incompatible integer to pointer conversion initializing '__global char *' with an expression of type 'int'}}
#else
// expected-warning at -4{{incompatible pointer types initializing '__global char *' with an expression of type '__global int *'}}
+ // expected-warning at -5{{passing non-generic address space pointer to to_global may cause dynamic conversion affecting performance}}
#endif
}
Index: lib/Sema/SemaChecking.cpp
===================================================================
--- lib/Sema/SemaChecking.cpp
+++ lib/Sema/SemaChecking.cpp
@@ -849,6 +849,13 @@
return true;
}
+ if (RT->getPointeeType().getAddressSpace() != LangAS::opencl_generic) {
+ S.Diag(Call->getArg(0)->getLocStart(),
+ diag::warn_opencl_generic_address_space_arg)
+ << Call->getDirectCallee()->getNameInfo().getAsString()
+ << Call->getArg(0)->getSourceRange();
+ }
+
RT = RT->getPointeeType();
auto Qual = RT.getQualifiers();
switch (BuiltinID) {
Index: include/clang/Basic/DiagnosticSemaKinds.td
===================================================================
--- include/clang/Basic/DiagnosticSemaKinds.td
+++ include/clang/Basic/DiagnosticSemaKinds.td
@@ -8606,6 +8606,10 @@
"invalid prototype, variadic arguments are not allowed in OpenCL">;
def err_opencl_requires_extension : Error<
"use of %select{type|declaration}0 %1 requires %2 extension to be enabled">;
+def warn_opencl_generic_address_space_arg : Warning<
+ "passing non-generic address space pointer to %0"
+ " may cause dynamic conversion affecting performance">,
+ InGroup<Conversion>, DefaultIgnore;
// OpenCL v2.0 s6.13.6 -- Builtin Pipe Functions
def err_opencl_builtin_pipe_first_arg : Error<
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D51411.164835.patch
Type: text/x-patch
Size: 2644 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180911/9678392f/attachment.bin>
More information about the cfe-commits
mailing list