Skip to content

Commit 69528a4

Browse files
author
iclsrc
committed
Merge from 'sycl' to 'sycl-web' (#1)
2 parents d4b9838 + 02756e3 commit 69528a4

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

sycl/include/CL/sycl/backend.hpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ template <backend Backend, typename T> struct BackendReturn {
3939
// TODO replace usage of interop with specializations.
4040
using type = typename interop<Backend, T>::type;
4141
};
42+
43+
// TODO each backend can have its own custom errc enumeration
44+
// but the details for this are not fully specified yet
45+
enum class backend_errc : unsigned int {};
4246
} // namespace detail
4347

4448
template <backend Backend> class backend_traits {
@@ -49,7 +53,7 @@ template <backend Backend> class backend_traits {
4953
template <class T>
5054
using return_type = typename detail::BackendReturn<Backend, T>::type;
5155

52-
// TODO define errc once SYCL2020-style exceptions are supported.
56+
using errc = detail::backend_errc;
5357
};
5458

5559
template <backend Backend, typename SyclType>

sycl/include/CL/sycl/exception.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
// 4.9.2 Exception Class Interface
1212

13+
#include <CL/sycl/backend_types.hpp>
1314
#include <CL/sycl/detail/common.hpp>
1415
#include <CL/sycl/detail/export.hpp>
1516
#include <CL/sycl/detail/pi.h>
@@ -186,6 +187,8 @@ enum class errc : unsigned int {
186187
backend_mismatch = 14,
187188
};
188189

190+
template <backend B> using errc_for = typename backend_traits<B>::errc;
191+
189192
/// Constructs an error code using e and sycl_category()
190193
__SYCL_EXPORT std::error_code make_error_code(sycl::errc E) noexcept;
191194

sycl/test/basic_tests/exceptions-SYCL-2020.cpp

+21
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,27 @@ int main() {
7777
static_assert(std::is_error_code_enum<sycl::errc>::value, "errc enum should identify as error code");
7878
static_assert(!std::is_error_condition_enum<sycl::errc>::value, "errc enum should not identify as error condition");
7979

80+
// Test errc_for and backends. Should compile without complaint.
81+
constexpr int EC = 1;
82+
sycl::backend_traits<sycl::backend::opencl>::errc someOpenCLErrCode{EC};
83+
sycl::errc_for<sycl::backend::opencl> anotherOpenCLErrCode{EC};
84+
assert(someOpenCLErrCode == anotherOpenCLErrCode);
85+
sycl::backend_traits<sycl::backend::level_zero>::errc someL0ErrCode{EC};
86+
sycl::errc_for<sycl::backend::level_zero> anotherL0ErrCode{EC};
87+
assert(someL0ErrCode == anotherL0ErrCode);
88+
sycl::backend_traits<sycl::backend::host>::errc someHOSTErrCode{EC};
89+
sycl::errc_for<sycl::backend::host> anotherHOSTErrCode{EC};
90+
assert(someHOSTErrCode == anotherHOSTErrCode);
91+
sycl::backend_traits<sycl::backend::cuda>::errc someCUDAErrCode{EC};
92+
sycl::errc_for<sycl::backend::cuda> anotherCUDAErrCode{EC};
93+
assert(someCUDAErrCode == anotherCUDAErrCode);
94+
sycl::backend_traits<sycl::backend::esimd_cpu>::errc someESIMDErrCode{EC};
95+
sycl::errc_for<sycl::backend::esimd_cpu> anotherESIMDErrCode{EC};
96+
assert(someESIMDErrCode == anotherESIMDErrCode);
97+
sycl::backend_traits<sycl::backend::rocm>::errc someROCMErrCode{EC};
98+
sycl::errc_for<sycl::backend::rocm> anotherROCMErrCode{EC};
99+
assert(someROCMErrCode == anotherROCMErrCode);
100+
80101
std::cout << "OK" << std::endl;
81102
return 0;
82103
}

0 commit comments

Comments
 (0)