Skip to content

Commit 12a4566

Browse files
[SYCL] Fix sycl::vec constructor ambiguity (#8608)
Recent changes to the sycl::vec class added a private constructor taking and array. This resulted in constructor ambiguity when passing an initializer list, despite the constructor being private. This commit removes the constructor, making the implementation use the constructor taking both an array and an index sequence directly. --------- Signed-off-by: Larsen, Steffen <steffen.larsen@intel.com> Co-authored-by: Alexey Sachkov <alexey.sachkov@intel.com>
1 parent c5c7ac2 commit 12a4566

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

sycl/include/sycl/types.hpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -729,9 +729,6 @@ template <typename Type, int NumElements> class vec {
729729
std::index_sequence<Is...>)
730730
: m_Data{Arr[Is]...} {}
731731
732-
constexpr vec(const std::array<vec_data_t<DataT>, NumElements> &Arr)
733-
: vec{Arr, std::make_index_sequence<NumElements>()} {}
734-
735732
public:
736733
using element_type = DataT;
737734
using rel_t = detail::rel_t<DataT>;
@@ -796,7 +793,8 @@ template <typename Type, int NumElements> class vec {
796793
template <typename Ty = DataT>
797794
explicit constexpr vec(const EnableIfHostHalf<Ty> &arg)
798795
: vec{detail::RepeatValue<NumElements>(
799-
static_cast<vec_data_t<DataT>>(arg))} {}
796+
static_cast<vec_data_t<DataT>>(arg)),
797+
std::make_index_sequence<NumElements>()} {}
800798
801799
template <typename Ty = DataT>
802800
typename detail::enable_if_t<
@@ -812,7 +810,8 @@ template <typename Type, int NumElements> class vec {
812810
#else
813811
explicit constexpr vec(const DataT &arg)
814812
: vec{detail::RepeatValue<NumElements>(
815-
static_cast<vec_data_t<DataT>>(arg))} {}
813+
static_cast<vec_data_t<DataT>>(arg)),
814+
std::make_index_sequence<NumElements>()} {}
816815
817816
template <typename Ty = DataT>
818817
typename detail::enable_if_t<
@@ -883,7 +882,8 @@ template <typename Type, int NumElements> class vec {
883882
template <typename... argTN, typename = EnableIfSuitableTypes<argTN...>,
884883
typename = EnableIfSuitableNumElements<argTN...>>
885884
constexpr vec(const argTN &...args)
886-
: vec{VecArgArrayCreator<vec_data_t<DataT>, argTN...>::Create(args...)} {}
885+
: vec{VecArgArrayCreator<vec_data_t<DataT>, argTN...>::Create(args...),
886+
std::make_index_sequence<NumElements>()} {}
887887
888888
// TODO: Remove, for debug purposes only.
889889
void dump() {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// RUN: %clang -fsycl -fsyntax-only -Xclang -verify %s
2+
// expected-no-diagnostics
3+
4+
// Regression test checking that the vector ctor taking an initializer list
5+
// doesn't cause warnings or errors.
6+
7+
#include <sycl/sycl.hpp>
8+
9+
int main() {
10+
sycl::vec<int, 2> V({1, 2});
11+
return 0;
12+
}

0 commit comments

Comments
 (0)