diff --git a/clang/lib/Sema/SemaSYCL.cpp b/clang/lib/Sema/SemaSYCL.cpp index 997c24bb9636c..f2b930932d3ce 100644 --- a/clang/lib/Sema/SemaSYCL.cpp +++ b/clang/lib/Sema/SemaSYCL.cpp @@ -1903,6 +1903,10 @@ static void printArguments(ASTContext &Ctx, raw_ostream &ArgOS, for (unsigned I = 0; I < Args.size(); I++) { const TemplateArgument &Arg = Args[I]; + // If argument is an empty pack argument, skip printing comma and argument. + if (Arg.getKind() == TemplateArgument::ArgKind::Pack && !Arg.pack_size()) + continue; + if (I != 0) ArgOS << ", "; diff --git a/clang/test/CodeGenSYCL/int_header1.cpp b/clang/test/CodeGenSYCL/int_header1.cpp index a2e6288a7875c..59e91a7acdb17 100644 --- a/clang/test/CodeGenSYCL/int_header1.cpp +++ b/clang/test/CodeGenSYCL/int_header1.cpp @@ -12,6 +12,7 @@ // CHECK:template <> struct KernelInfo<::nm1::KernelName4> { // CHECK:template <> struct KernelInfo<::nm1::KernelName8<::nm1::nm2::C>> { // CHECK:template <> struct KernelInfo<::TmplClassInAnonNS> { +// CHECK:template <> struct KernelInfo<::nm1::KernelName9> { // This test checks if the SYCL device compiler is able to generate correct // integration header when the kernel name class is expressed in different @@ -42,6 +43,9 @@ namespace nm1 { template <> class KernelName4 {}; template <> class KernelName4 {}; + template + class KernelName9; + } // namespace nm1 namespace { @@ -128,6 +132,10 @@ struct MyWrapper { kernel_single_task>( [=]() { acc.use(); }); + // Kernel name type is a templated specialization class with empty template pack argument + kernel_single_task>( + [=]() { acc.use(); }); + return 0; } }; @@ -151,5 +159,6 @@ int main() { KernelInfo>::getName(); KernelInfo>::getName(); KernelInfo>::getName(); + KernelInfo>::getName(); #endif //__SYCL_DEVICE_ONLY__ }