@@ -1127,8 +1127,8 @@ static QualType GetSYCLKernelObjectType(const FunctionDecl *KernelCaller) {
11271127 assert (KernelCaller->getNumParams () > 0 && " Insufficient kernel parameters" );
11281128 QualType KernelParamTy = KernelCaller->getParamDecl (0 )->getType ();
11291129
1130- // SYCL 2020 kernels are passed by reference.
1131- assert (KernelParamTy-> isReferenceType () && " Since SYCL 2020 kernels must be passed by reference." );
1130+ assert (KernelParamTy-> isReferenceType () &&
1131+ " Kernel function must be passed by reference." );
11321132 return KernelParamTy = KernelParamTy->getPointeeType ();
11331133}
11341134
@@ -5032,13 +5032,9 @@ void SemaSYCL::CheckSYCLKernelCall(FunctionDecl *KernelFunc,
50325032 }
50335033 }
50345034
5035- // check that calling kernel conforms to spec
5036- QualType KernelParamTy = KernelFunc->getParamDecl (0 )->getType ();
5037- if (! KernelParamTy->isReferenceType ()) {
5038- // passing by value. emit warning if using SYCL 2020 or greater
5039- if (SemaRef.LangOpts .getSYCLVersion () >= LangOptions::SYCL_2020)
5040- Diag (KernelFunc->getLocation (), diag::warn_sycl_pass_by_value_deprecated);
5041- }
5035+ // SYCL only supports passing kernel functions by reference.
5036+ if (!KernelFunc->getParamDecl (0 )->getType ()->isReferenceType ())
5037+ Diag (KernelFunc->getLocation (), diag::err_sycl_kernel_pass_by_value);
50425038
50435039 // Do not visit invalid kernel object.
50445040 if (KernelObj->isInvalidDecl ())
@@ -5163,8 +5159,8 @@ void SemaSYCL::SetSYCLKernelNames() {
51635159//
51645160// Example of kernel caller function:
51655161// template <typename KernelName, typename KernelType/*, ...*/>
5166- // __attribute__((sycl_kernel)) void kernel_caller_function(KernelType
5167- // KernelFuncObj) {
5162+ // __attribute__((sycl_kernel))
5163+ // void kernel_caller_function(const KernelType & KernelFuncObj) {
51685164// KernelFuncObj();
51695165// }
51705166//
0 commit comments