================
@@ -565,73 +566,84 @@ follows.
 
   namespace sycl {
   class handler {
-    template<typename KernelNameType, typename KernelType>
-    [[ clang::sycl_kernel_entry_point(KernelNameType) ]]
-    static void kernel_entry_point(KernelType kernel) {
-      kernel();
+    template<typename KernelName, typename... Ts>
+    void sycl_kernel_launch(const char* kernelSymbol, Ts&&... kernelArgs) {
----------------
tahonermann wrote:

I don't think use of a reserved identifier is necessary. Name lookup for 
`sycl_kernel_launch` is performed as-if within the definition of the function 
declared with the `sycl_kernel_entry_point` attribute. That by itself is not 
sufficient to avoid ambiguous overload resolution for a function declared at 
namespace scope, but it does suffice to avoid ambiguity if `sycl_kernel_launch` 
is declared as a member function or a variable.

Consider the examples at https://godbolt.org/z/h8Ynef7n5. Case 1 does 
illustrate how an ambiguity can arise if `sycl_kernel_launch` is declared at 
namespace scope. Cases 2, 3, and 4 demonstrate that such ambiguity does not 
occur if `sycl_kernel_launch` is declared as a (static or non-static) member 
function, as a variable at namespace scope, or as a (static) data member. I 
expect implementations to use the member function approach since that enables 
convenient sharing of (member) data between the entry point function and 
`sycl_kernel_launch`. Cases 3 and 4 demonstrate how the customization point 
object (CPO) idiom can be deployed to circumvent ADL.

https://github.com/llvm/llvm-project/pull/152403
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to