From 006252028487c4f0c40b202be870198e46bea9ef Mon Sep 17 00:00:00 2001 From: Robertkq Date: Thu, 6 Aug 2026 15:39:50 +0300 Subject: [PATCH 1/3] Add missing functions & noexcept keyword --- sycl/include/sycl/range.hpp | 56 ++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/sycl/include/sycl/range.hpp b/sycl/include/sycl/range.hpp index 0434081048cfb..91551aeef766b 100644 --- a/sycl/include/sycl/range.hpp +++ b/sycl/include/sycl/range.hpp @@ -40,22 +40,23 @@ template class range : public detail::array { /* The following constructor is only available in the range class specialization where: Dimensions==1 */ template - range(typename std::enable_if_t<(N == 1), size_t> dim0) : base(dim0) {} + range(typename std::enable_if_t<(N == 1), size_t> dim0) noexcept + : base(dim0) {} /* The following constructor is only available in the range class specialization where: Dimensions==2 */ template - range(typename std::enable_if_t<(N == 2), size_t> dim0, size_t dim1) + range(typename std::enable_if_t<(N == 2), size_t> dim0, size_t dim1) noexcept : base(dim0, dim1) {} /* The following constructor is only available in the range class specialization where: Dimensions==3 */ template range(typename std::enable_if_t<(N == 3), size_t> dim0, size_t dim1, - size_t dim2) + size_t dim2) noexcept : base(dim0, dim1, dim2) {} - size_t size() const { + size_t size() const noexcept { size_t size = 1; for (int i = 0; i < Dimensions; ++i) { size *= this->common_array[i]; @@ -64,15 +65,17 @@ template class range : public detail::array { } range(const range &rhs) = default; - range(range &&rhs) = default; + range(range &&rhs) noexcept = default; range &operator=(const range &rhs) = default; - range &operator=(range &&rhs) = default; - range() = default; + range &operator=(range &&rhs) noexcept = default; + range() noexcept = default; + + ~range() noexcept = default; // OP is: +, -, *, /, %, <<, >>, &, |, ^, &&, ||, <, >, <=, >= #define __SYCL_GEN_OPT_BASE(op) \ - friend range operator op(const range &lhs, \ - const range &rhs) { \ + friend range operator op( \ + const range &lhs, const range &rhs) noexcept { \ range result(lhs); \ for (int i = 0; i < Dimensions; ++i) { \ result.common_array[i] = lhs.common_array[i] op rhs.common_array[i]; \ @@ -86,7 +89,7 @@ template class range : public detail::array { __SYCL_GEN_OPT_BASE(op) \ template \ friend IntegralType> operator op( \ - const range &lhs, const T &rhs) { \ + const range &lhs, const T &rhs) noexcept { \ range result(lhs); \ for (int i = 0; i < Dimensions; ++i) { \ result.common_array[i] = lhs.common_array[i] op rhs; \ @@ -95,7 +98,7 @@ template class range : public detail::array { } \ template \ friend IntegralType> operator op( \ - const T &lhs, const range &rhs) { \ + const T &lhs, const range &rhs) noexcept { \ range result(rhs); \ for (int i = 0; i < Dimensions; ++i) { \ result.common_array[i] = lhs op rhs.common_array[i]; \ @@ -103,6 +106,9 @@ template class range : public detail::array { return result; \ } #else + +// Can't find either of them in documentation, not adding noexcept for these, +// maybe need to be removed #define __SYCL_GEN_OPT(op) \ __SYCL_GEN_OPT_BASE(op) \ friend range operator op(const range &lhs, \ @@ -145,8 +151,8 @@ template class range : public detail::array { // OP is: +=, -=, *=, /=, %=, <<=, >>=, &=, |=, ^= #define __SYCL_GEN_OPT(op) \ - friend range &operator op(range &lhs, \ - const range &rhs) { \ + friend range &operator op( \ + range &lhs, const range &rhs) noexcept { \ for (int i = 0; i < Dimensions; ++i) { \ lhs.common_array[i] op rhs[i]; \ } \ @@ -158,8 +164,19 @@ template class range : public detail::array { lhs.common_array[i] op rhs; \ } \ return lhs; \ + } \ + template \ + friend IntegralType> operator op( \ + range &lhs, const T &rhs) noexcept { \ + for (int i = 0; i < Dimensions; ++i) { \ + lhs.common_array[i] op rhs; \ + } \ + return lhs; \ } + // second overload above is not in documentation, maybe need to be removed or + // guarded against __SYCL_DISABLE_ID_TO_INT_CONV__ like the other operators + __SYCL_GEN_OPT(+=) __SYCL_GEN_OPT(-=) __SYCL_GEN_OPT(*=) @@ -175,7 +192,8 @@ template class range : public detail::array { // OP is unary +, - #define __SYCL_GEN_OPT(op) \ - friend range operator op(const range &rhs) { \ + friend range operator op( \ + const range &rhs) noexcept { \ range result(rhs); \ for (int i = 0; i < Dimensions; ++i) { \ result.common_array[i] = (op rhs.common_array[i]); \ @@ -190,7 +208,7 @@ template class range : public detail::array { // OP is prefix ++, -- #define __SYCL_GEN_OPT(op) \ - friend range &operator op(range &rhs) { \ + friend range &operator op(range &rhs) noexcept { \ for (int i = 0; i < Dimensions; ++i) { \ op rhs.common_array[i]; \ } \ @@ -204,7 +222,7 @@ template class range : public detail::array { // OP is postfix ++, -- #define __SYCL_GEN_OPT(op) \ - friend range operator op(range &lhs, int) { \ + friend range operator op(range &lhs, int) noexcept { \ range old_lhs(lhs); \ for (int i = 0; i < Dimensions; ++i) { \ op lhs.common_array[i]; \ @@ -226,9 +244,9 @@ template class range : public detail::array { }; #ifdef __cpp_deduction_guides -range(size_t)->range<1>; -range(size_t, size_t)->range<2>; -range(size_t, size_t, size_t)->range<3>; +range(size_t) -> range<1>; +range(size_t, size_t) -> range<2>; +range(size_t, size_t, size_t) -> range<3>; #endif } // namespace _V1 From 83ded7aadbb407f1cca38d0afc47b7edf1964c42 Mon Sep 17 00:00:00 2001 From: Robertkq Date: Thu, 6 Aug 2026 16:06:43 +0300 Subject: [PATCH 2/3] remove comments --- sycl/include/sycl/range.hpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/sycl/include/sycl/range.hpp b/sycl/include/sycl/range.hpp index 91551aeef766b..bee5b770666f5 100644 --- a/sycl/include/sycl/range.hpp +++ b/sycl/include/sycl/range.hpp @@ -107,8 +107,6 @@ template class range : public detail::array { } #else -// Can't find either of them in documentation, not adding noexcept for these, -// maybe need to be removed #define __SYCL_GEN_OPT(op) \ __SYCL_GEN_OPT_BASE(op) \ friend range operator op(const range &lhs, \ @@ -174,9 +172,6 @@ template class range : public detail::array { return lhs; \ } - // second overload above is not in documentation, maybe need to be removed or - // guarded against __SYCL_DISABLE_ID_TO_INT_CONV__ like the other operators - __SYCL_GEN_OPT(+=) __SYCL_GEN_OPT(-=) __SYCL_GEN_OPT(*=) From e267437c1c0847b3ed52862cb00c5404be243ee6 Mon Sep 17 00:00:00 2001 From: Robertkq Date: Thu, 6 Aug 2026 16:10:39 +0300 Subject: [PATCH 3/3] add noexcept to detail::array --- sycl/include/sycl/detail/array.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sycl/include/sycl/detail/array.hpp b/sycl/include/sycl/detail/array.hpp index 2b723a2ebf73e..be6ba7a73d37b 100644 --- a/sycl/include/sycl/detail/array.hpp +++ b/sycl/include/sycl/detail/array.hpp @@ -61,17 +61,17 @@ template class array { return result; } - size_t get(int dimension) const { + size_t get(int dimension) const noexcept { check_dimension(dimension); return common_array[dimension]; } - size_t &operator[](int dimension) { + size_t &operator[](int dimension) noexcept { check_dimension(dimension); return common_array[dimension]; } - size_t operator[](int dimension) const { + size_t operator[](int dimension) const noexcept { check_dimension(dimension); return common_array[dimension]; }