1- // RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.run
1+ // RUN: %clangxx -fsycl -std=c++17 - fsycl-targets=%sycl_triple %s -o %t.run
22// RUN: %GPU_RUN_PLACEHOLDER %t.run
33// RUN: %CPU_RUN_PLACEHOLDER %t.run
44// RUN: %ACC_RUN_PLACEHOLDER %t.run
1313
1414using namespace cl ::sycl;
1515
16- template <typename T> class KernelName ;
16+ template <typename T> class TypeHelper ;
17+
18+ template <typename T>
19+ using KernelName = class TypeHelper <typename std::conditional<
20+ std::is_same<T, std::byte>::value, unsigned char , T>::type>;
1721
1822// Define the number of work items to enqueue.
1923const size_t NElems = 32 ;
@@ -24,14 +28,14 @@ template <typename T> void initInputBuffer(buffer<T, 1> &Buf, size_t Stride) {
2428 auto Acc = Buf.template get_access <access::mode::write>();
2529 for (size_t I = 0 ; I < Buf.get_count (); I += WorkGroupSize) {
2630 for (size_t J = 0 ; J < WorkGroupSize; J++)
27- Acc[I + J] = I + J + ((J % Stride == 0 ) ? 100 : 0 );
31+ Acc[I + J] = static_cast <T>( I + J + ((J % Stride == 0 ) ? 100 : 0 ) );
2832 }
2933}
3034
3135template <typename T> void initOutputBuffer (buffer<T, 1 > &Buf) {
3236 auto Acc = Buf.template get_access <access::mode::write>();
3337 for (size_t I = 0 ; I < Buf.get_count (); I++)
34- Acc[I] = 0 ;
38+ Acc[I] = static_cast <T>( 0 ) ;
3539}
3640
3741template <typename T> struct is_vec : std::false_type {};
@@ -48,9 +52,8 @@ template <typename T> bool checkEqual(vec<T, 4> A, size_t B) {
4852}
4953
5054template <typename T>
51- typename std::enable_if<!is_vec<T>::value, bool >::type checkEqual (T A,
52- size_t B) {
53- T TB = B;
55+ typename std::enable_if_t <!is_vec<T>::value, bool > checkEqual (T A, size_t B) {
56+ T TB = static_cast <T>(B);
5457 return A == TB;
5558}
5659
@@ -67,7 +70,16 @@ template <typename T> std::string toString(vec<T, 4> A) {
6770}
6871
6972template <typename T = void >
70- typename std::enable_if<!is_vec<T>::value, std::string>::type toString (T A) {
73+ typename std::enable_if_t <
74+ !is_vec<T>::value && std::is_same<T, std::byte>::value, std::string>
75+ toString (T A) {
76+ return std::to_string ((unsigned char )A);
77+ }
78+
79+ template <typename T = void >
80+ typename std::enable_if_t <
81+ !is_vec<T>::value && !std::is_same<T, std::byte>::value, std::string>
82+ toString (T A) {
7183 return std::to_string (A);
7284}
7385
@@ -156,6 +168,8 @@ int main() {
156168 return 1 ;
157169 if (test<cl::sycl::cl_bool>(Stride))
158170 return 1 ;
171+ if (test<std::byte>(Stride))
172+ return 1 ;
159173 }
160174
161175 std::cout << " Test passed.\n " ;
0 commit comments