diff --git a/clang/test/SemaSYCL/Inputs/sycl.hpp b/clang/test/SemaSYCL/Inputs/sycl.hpp index 43ea3ebbf2f63..5bd37447ce814 100644 --- a/clang/test/SemaSYCL/Inputs/sycl.hpp +++ b/clang/test/SemaSYCL/Inputs/sycl.hpp @@ -194,6 +194,12 @@ class handler { } }; +namespace experimental { + +template +class spec_constant {}; +} // namespace experimental + } // namespace sycl } // namespace cl diff --git a/clang/test/SemaSYCL/spec_const_and_accesor_crash.cpp b/clang/test/SemaSYCL/spec_const_and_accesor_crash.cpp new file mode 100644 index 0000000000000..cbfba6e4be32d --- /dev/null +++ b/clang/test/SemaSYCL/spec_const_and_accesor_crash.cpp @@ -0,0 +1,19 @@ +// RUN: %clang_cc1 -fsycl -fsycl-is-device -fsyntax-only -I %S/Inputs -ast-dump %s | FileCheck %s +// The test checks that Clang doesn't crash if a specialization constant gets +// into the kernel capture list before an accessor + +#include + +template +__attribute__((sycl_kernel)) void kernel(Func kernelFunc) { + kernelFunc(); +} + +int main() { + cl::sycl::experimental::spec_constant spec_const; + cl::sycl::accessor accessor; + // CHECK: FieldDecl {{.*}} implicit referenced 'cl::sycl::experimental::spec_constant' + // CHECK: FieldDecl {{.*}} implicit referenced 'cl::sycl::accessor' + kernel([spec_const, accessor]() {}); + return 0; +}