https://gcc.gnu.org/g:c00c750ba27dd86aaf5bc2d06679e30c76826272
commit r16-8413-gc00c750ba27dd86aaf5bc2d06679e30c76826272 Author: Tomasz Kamiński <[email protected]> Date: Thu Mar 19 16:35:13 2026 +0100 libstdc++: Rename std::strided_slice to std::extent_slice. This is last change proposed in P3982R2, so we bump submdspan value. libstdc++-v3/ChangeLog: * include/bits/version.def (submdspan): Update to 202603, and list all papers in comment. * include/bits/version.h: Regenerate. * include/std/mdspan: Replaced std::strided_stride to std::extent_slice, __is_strided_slice to __is_extent_slice, _SliceKind::__unit_strided_slice to __unit_stride_slice. * src/c++23/std.cc.in (std::extent_slice): Replaced std::strided_slice to std::extent_slice. * testsuite/23_containers/mdspan/submdspan/canonical_slices.cc: Replaced all occurences of strided_slice to extent_slice. * testsuite/23_containers/mdspan/submdspan/canonical_slices_neg.cc: Likewise. * testsuite/23_containers/mdspan/submdspan/strided_slice.cc: Move to... * testsuite/23_containers/mdspan/submdspan/extent_slice.cc: ...here and handle rename. * testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc: Move to... * testsuite/23_containers/mdspan/submdspan/extent_slice_neg.cc: ...here and handle rename. * testsuite/23_containers/mdspan/submdspan/selections/testcases.h: Replaced all occurences of strided_slice to extent_slice. * testsuite/23_containers/mdspan/submdspan/subextents.cc: Likewise. * testsuite/23_containers/mdspan/submdspan/subextents_neg.cc: Likewise. * testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc: Likewise. * testsuite/23_containers/mdspan/submdspan/submdspan_neg.cc: Likewise. Reviewed-by: Jonathan Wakely <[email protected]> Signed-off-by: Tomasz Kamiński <[email protected]> Diff: --- libstdc++-v3/include/bits/version.def | 7 ++- libstdc++-v3/include/bits/version.h | 4 +- libstdc++-v3/include/std/mdspan | 56 +++++++++++----------- libstdc++-v3/src/c++23/std.cc.in | 2 +- .../mdspan/submdspan/canonical_slices.cc | 26 +++++----- .../mdspan/submdspan/canonical_slices_neg.cc | 8 ++-- .../{strided_slice.cc => extent_slice.cc} | 12 ++--- .../{strided_slice_neg.cc => extent_slice_neg.cc} | 2 +- .../mdspan/submdspan/selections/testcases.h | 20 ++++---- .../23_containers/mdspan/submdspan/subextents.cc | 30 ++++++------ .../mdspan/submdspan/subextents_neg.cc | 12 ++--- .../mdspan/submdspan/submdspan_mapping.cc | 32 ++++++------- .../mdspan/submdspan/submdspan_neg.cc | 40 ++++++++-------- 13 files changed, 128 insertions(+), 123 deletions(-) diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def index b7d4b3849acb..ada8da88bc52 100644 --- a/libstdc++-v3/include/bits/version.def +++ b/libstdc++-v3/include/bits/version.def @@ -1117,8 +1117,13 @@ ftms = { ftms = { name = submdspan; + // 202306 P2630R4 Submdspan + // 202403 P2642R6 Padded mdspan layouts + // 202411 P3355R1 Fix submdspan for C++26 + // 202511 P3663R3 Future-proof submdspan-mapping + // 202603 P3982R1 Split strided_slice into extent_slice and range_slice for C++26 values = { - v = 202411; + v = 202603; cxxmin = 26; extra_cond = "__glibcxx_constant_wrapper >= 202506L"; }; diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h index c2219bedb5f8..0490e79dd416 100644 --- a/libstdc++-v3/include/bits/version.h +++ b/libstdc++-v3/include/bits/version.h @@ -1243,9 +1243,9 @@ #if !defined(__cpp_lib_submdspan) # if (__cplusplus > 202302L) && (__glibcxx_constant_wrapper >= 202506L) -# define __glibcxx_submdspan 202411L +# define __glibcxx_submdspan 202603L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_submdspan) -# define __cpp_lib_submdspan 202411L +# define __cpp_lib_submdspan 202603L # endif # endif #endif /* !defined(__cpp_lib_submdspan) */ diff --git a/libstdc++-v3/include/std/mdspan b/libstdc++-v3/include/std/mdspan index 5b80de2ca619..f30c5e83d164 100644 --- a/libstdc++-v3/include/std/mdspan +++ b/libstdc++-v3/include/std/mdspan @@ -356,7 +356,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline constexpr full_extent_t full_extent{}; template<typename _OffsetType, typename _ExtentType, typename _StrideType> - struct strided_slice + struct extent_slice { static_assert(__is_signed_or_unsigned_integer<_OffsetType>::value || __detail::__integral_constant_like<_OffsetType>); @@ -879,10 +879,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #ifdef __glibcxx_submdspan template<typename _Tp> - constexpr bool __is_strided_slice = false; + constexpr bool __is_extent_slice = false; template<typename _OffsetType, typename _ExtentType, typename _StrideType> - constexpr bool __is_strided_slice<strided_slice<_OffsetType, + constexpr bool __is_extent_slice<extent_slice<_OffsetType, _ExtentType, _StrideType>> = true; template<typename _Tp> @@ -921,7 +921,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _Slice, typename _IndexType> concept __acceptable_slice_type = same_as<_Slice, full_extent_t> || same_as<_Slice, _IndexType> || __is_constant_wrapper<_Slice> - || __is_strided_slice<_Slice>; + || __is_extent_slice<_Slice>; template<typename _IndexType, typename... _Slices> consteval auto @@ -954,7 +954,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { if constexpr (same_as<_Slice, full_extent_t>) return 0; - else if constexpr (__is_strided_slice<_Slice>) + else if constexpr (__is_extent_slice<_Slice>) return __slice.offset; else return __slice; // collapsing slice @@ -1011,7 +1011,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION constexpr typename _Extents::index_type __dynamic_slice_extent(const _Extents& __exts, _Slice __slice) { - if constexpr (__is_strided_slice<_Slice>) + if constexpr (__is_extent_slice<_Slice>) return __slice.extent; else return __exts.extent(_K); @@ -1125,7 +1125,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { auto __stride = [&__mapping](size_t __k, auto __slice) -> _IndexType { - if constexpr (__is_strided_slice<decltype(__slice)>) + if constexpr (__is_extent_slice<decltype(__slice)>) if (__slice.extent > 1) return __mapping.stride(__k) * __slice.stride; return __mapping.stride(__k); @@ -1169,7 +1169,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __stride *= _Trait::_S_padded_extent(__mapping, __i); size_t __krev = _SubTrait::_S_idx(__k); - if constexpr (__is_strided_slice<decltype(__slice)>) + if constexpr (__is_extent_slice<decltype(__slice)>) { if (__slice.extent > 1) __ret[__krev] = __stride * __slice.stride; @@ -1201,19 +1201,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } template<typename _Slice> - concept __is_unit_stride_slice = (__mdspan::__is_strided_slice<_Slice> + concept __is_unit_stride_slice = (__mdspan::__is_extent_slice<_Slice> && __mdspan::__is_constant_wrapper<typename _Slice::stride_type> && _Slice::stride_type::value == 1) || std::same_as<_Slice, full_extent_t>; // These are (forced) exclusive categories: // - full & collapsing: obvious, - // - unit_strided_slice: strided_slice{a, b, cw<1>}, but not `full`, - // - strided_slice: strided_slice{a, b, c} with c != cw<1>. + // - unit_extent_slice: extent_slice{a, b, cw<1>}, but not `full`, + // - extent_slice: extent_slice{a, b, c} with c != cw<1>. enum class _SliceKind { - __strided_slice, - __unit_strided_slice, + __extent_slice, + __unit_stride_slice, __full, __collapsing }; @@ -1224,12 +1224,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { if constexpr (std::same_as<_Slice, full_extent_t>) return _SliceKind::__full; - else if constexpr (__mdspan::__is_strided_slice<_Slice>) + else if constexpr (__mdspan::__is_extent_slice<_Slice>) { if constexpr (__mdspan::__is_unit_stride_slice<_Slice>) - return _SliceKind::__unit_strided_slice; + return _SliceKind::__unit_stride_slice; else - return _SliceKind::__strided_slice; + return _SliceKind::__extent_slice; } else return _SliceKind::__collapsing; @@ -1260,7 +1260,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION auto __last = __slice_kinds[__block_size - 1]; return __last == _SliceKind::__full - || __last == _SliceKind::__unit_strided_slice; + || __last == _SliceKind::__unit_stride_slice; } // __u __u + __sub_rank-2 @@ -1270,7 +1270,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION size_t __sub_rank) { if (__slice_kinds[0] != _SliceKind::__full - && __slice_kinds[0] != _SliceKind::__unit_strided_slice) + && __slice_kinds[0] != _SliceKind::__unit_stride_slice) return dynamic_extent; else if (__slice_kinds.size() == 1) return dynamic_extent; @@ -1361,7 +1361,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION size_t __sub_rank) { if (__sub_rank == 1) - return __slice_kinds[0] == _SliceKind::__unit_strided_slice + return __slice_kinds[0] == _SliceKind::__unit_stride_slice || __slice_kinds[0] == _SliceKind::__full; else return false; @@ -1429,7 +1429,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION size_t __sub_rank) { if (__sub_rank == 1) - return __slice_kinds[_Nm - 1] == _SliceKind::__unit_strided_slice + return __slice_kinds[_Nm - 1] == _SliceKind::__unit_stride_slice || __slice_kinds[_Nm - 1] == _SliceKind::__full; else return false; @@ -3299,7 +3299,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { if constexpr (is_same_v<_SpanType, constant_wrapper<_IndexType(0)>> || is_same_v<_StrideType, constant_wrapper<_IndexType(1)>>) - return strided_slice{ + return extent_slice{ .offset = __offset, .extent = __span, .stride = cw<_IndexType(1)> @@ -3308,20 +3308,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { static_assert(_StrideType::value > 0); if constexpr (__is_constant_wrapper<_SpanType>) - return strided_slice{ + return extent_slice{ .offset = __offset, .extent = cw<_IndexType(1 + (_SpanType::value - 1) / _StrideType::value)>, .stride = __stride }; else - return strided_slice{ + return extent_slice{ .offset = __offset, .extent = _IndexType(__span > 0 ? 1 + (__span - 1) / _StrideType::value : 0), .stride = __stride }; } else if (__span == 0 || __stride == 1) - return strided_slice{ + return extent_slice{ .offset = __offset, .extent = _IndexType(__span), .stride = _IndexType(1) @@ -3329,7 +3329,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION else { __glibcxx_assert(__stride > 0); - return strided_slice{ + return extent_slice{ .offset = __offset, .extent = _IndexType(1 + (__span - 1) / __stride), .stride = __stride @@ -3346,8 +3346,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return static_cast<full_extent_t>(std::move(__slice)); else if constexpr (is_convertible_v<_SliceType, _IndexType>) return __mdspan::__canonical_index<_IndexType>(std::move(__slice)); - else if constexpr (__is_strided_slice<_SliceType>) - return strided_slice{ + else if constexpr (__is_extent_slice<_SliceType>) + return extent_slice{ .offset = __mdspan::__canonical_index<_IndexType>(std::move(__slice.offset)), .extent = __mdspan::__canonical_index<_IndexType>(std::move(__slice.extent)), .stride = __mdspan::__canonical_index<_IndexType>(std::move(__slice.stride)) @@ -3412,7 +3412,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __check_valid_slice(const extents<_IndexType, _Extent>& __ext, const _Slice& __slice) { - if constexpr (__is_strided_slice<_Slice>) + if constexpr (__is_extent_slice<_Slice>) { __mdspan::__check_valid_index(__ext, __slice.extent); // DEVIATION: For empty slices, P3663r3 does not allow us to check diff --git a/libstdc++-v3/src/c++23/std.cc.in b/libstdc++-v3/src/c++23/std.cc.in index 32e167be0c1c..a7e88945c2f9 100644 --- a/libstdc++-v3/src/c++23/std.cc.in +++ b/libstdc++-v3/src/c++23/std.cc.in @@ -1914,7 +1914,7 @@ export namespace std using std::layout_right_padded; #endif #if __glibcxx_submdspan - using std::strided_slice; + using std::extent_slice; using std::range_slice; using std::full_extent_t; using std::full_extent; diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/canonical_slices.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/canonical_slices.cc index 7e6a0791af7d..d747ad40de21 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/canonical_slices.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/canonical_slices.cc @@ -242,7 +242,7 @@ test_triple_all() } constexpr bool -test_strided_slice(auto exts, auto co, auto ce, auto cs) +test_extent_slice(auto exts, auto co, auto ce, auto cs) { using IndexType = decltype(exts)::index_type; @@ -250,25 +250,25 @@ test_strided_slice(auto exts, auto co, auto ce, auto cs) auto cextent = std::cw<IndexType{ce.value}>; auto cstride = std::cw<IndexType{cs.value}>; - auto raw_ccc = std::strided_slice{co, ce, cs}; + auto raw_ccc = std::extent_slice{co, ce, cs}; auto [ccc] = std::canonical_slices(exts, raw_ccc); assert_same(ccc.offset, coffset); assert_same(ccc.extent, cextent); assert_same(ccc.stride, cstride); - auto raw_dcc = std::strided_slice{co.value, ce, cs}; + auto raw_dcc = std::extent_slice{co.value, ce, cs}; auto [dcc] = std::canonical_slices(exts, raw_dcc); assert_same(dcc.offset, coffset.value); assert_same(dcc.extent, cextent); assert_same(dcc.stride, cstride); - auto raw_cdc = std::strided_slice{co, ce.value, cs}; + auto raw_cdc = std::extent_slice{co, ce.value, cs}; auto [cdc] = std::canonical_slices(exts, raw_cdc); assert_same(cdc.offset, coffset); assert_same(cdc.extent, cextent.value); assert_same(cdc.stride, cstride); - auto raw_ccd = std::strided_slice{co, ce, cs.value}; + auto raw_ccd = std::extent_slice{co, ce, cs.value}; auto [ccd] = std::canonical_slices(exts, raw_ccd); assert_same(ccd.offset, coffset); assert_same(ccd.extent, cextent); @@ -277,17 +277,17 @@ test_strided_slice(auto exts, auto co, auto ce, auto cs) } constexpr bool -test_strided_slice() +test_extent_slice() { auto run = [](auto exts) { auto cs = std::cw<uint8_t{1}>; - test_strided_slice(exts, std::cw<uint8_t{2}>, std::cw<uint8_t{2}>, std::cw<uint8_t{2}>); - test_strided_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{5}>, std::cw<uint8_t{1}>); - test_strided_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>, std::cw<uint8_t{1}>); - test_strided_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>, std::cw<uint8_t{3}>); - test_strided_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>); - test_strided_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>, std::cw<uint8_t{9}>); + test_extent_slice(exts, std::cw<uint8_t{2}>, std::cw<uint8_t{2}>, std::cw<uint8_t{2}>); + test_extent_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{5}>, std::cw<uint8_t{1}>); + test_extent_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>, std::cw<uint8_t{1}>); + test_extent_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>, std::cw<uint8_t{3}>); + test_extent_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>); + test_extent_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>, std::cw<uint8_t{9}>); }; run(std::extents<int, 5>{}); @@ -301,7 +301,7 @@ test_all() test_scalar(); test_pair_all(); test_triple_all(); - test_strided_slice(); + test_extent_slice(); return true; } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/canonical_slices_neg.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/canonical_slices_neg.cc index 3923d5393b9e..5c61e938da5e 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/canonical_slices_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/canonical_slices_neg.cc @@ -65,7 +65,7 @@ template<typename Offset, typename Extent, typename Stride, typename Extents> constexpr bool test_under2(Offset o, Extent e, Stride s, Extents exts) { - std::canonical_slices(exts, std::strided_slice{o, e, s}); + std::canonical_slices(exts, std::extent_slice{o, e, s}); return true; } @@ -105,7 +105,7 @@ template<typename Offset, typename Extent, typename Stride, typename Extents> constexpr bool test_over2(Offset o, Extent e, Stride s, Extents exts) { - std::canonical_slices(exts, std::strided_slice{o, e, s}); + std::canonical_slices(exts, std::extent_slice{o, e, s}); return true; } @@ -189,7 +189,7 @@ constexpr bool test_overflow1(auto o, auto e) { auto exts = std::extents<uint8_t, dyn>{255}; - auto slice = std::strided_slice{o, e, 1}; + auto slice = std::extent_slice{o, e, 1}; std::canonical_slices(exts, slice); return true; } @@ -224,7 +224,7 @@ constexpr bool test_invalid(auto e, auto s) { auto exts = std::extents(5); - auto slice = std::strided_slice(0, e, s); + auto slice = std::extent_slice(0, e, s); std::canonical_slices(exts, slice); return true; } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/extent_slice.cc similarity index 67% rename from libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc rename to libstdc++-v3/testsuite/23_containers/mdspan/submdspan/extent_slice.cc index 6fa5aaa2f1ed..1a2a5b213990 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/extent_slice.cc @@ -5,9 +5,9 @@ #include <testsuite_hooks.h> constexpr void -check_strided_slice(auto s, auto offset, auto extent, auto stride) +check_extent_slice(auto s, auto offset, auto extent, auto stride) { - using slice_type = std::strided_slice<decltype(offset), decltype(extent), + using slice_type = std::extent_slice<decltype(offset), decltype(extent), decltype(stride)>; static_assert(std::same_as<decltype(s), slice_type>); VERIFY(s.offset == offset); @@ -20,12 +20,12 @@ test_initializers(auto offset, auto extent, auto stride) { auto check = [&](auto s) { - check_strided_slice(s, offset, extent, stride); + check_extent_slice(s, offset, extent, stride); }; - check(std::strided_slice{.offset=offset, .extent=extent, .stride=stride}); - check(std::strided_slice{offset, extent, stride}); - check(std::strided_slice(offset, extent, stride)); + check(std::extent_slice{.offset=offset, .extent=extent, .stride=stride}); + check(std::extent_slice{offset, extent, stride}); + check(std::extent_slice(offset, extent, stride)); } constexpr bool diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/extent_slice_neg.cc similarity index 84% rename from libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc rename to libstdc++-v3/testsuite/23_containers/mdspan/submdspan/extent_slice_neg.cc index 0f1d791d13aa..9740b37668a0 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/extent_slice_neg.cc @@ -7,7 +7,7 @@ template<typename OffsetType, typename ExtentType, typename StrideType> constexpr bool test_invalid() { - auto s1 = std::strided_slice(OffsetType{}, ExtentType{}, StrideType{}); // { dg-error "required from" } + auto s1 = std::extent_slice(OffsetType{}, ExtentType{}, StrideType{}); // { dg-error "required from" } return true; } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/testcases.h b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/testcases.h index eade9017e039..536d2ad51742 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/testcases.h +++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/testcases.h @@ -9,10 +9,10 @@ constexpr size_t dyn = std::dynamic_extent; constexpr auto all = std::full_extent; template<typename T> - constexpr bool is_strided_slice = false; + constexpr bool is_extent_slice = false; template<typename O, typename E, typename S> - constexpr bool is_strided_slice<std::strided_slice<O, E, S>> = true; + constexpr bool is_extent_slice<std::extent_slice<O, E, S>> = true; template<typename MDSpan> constexpr void @@ -151,7 +151,7 @@ template<typename IndexType, typename Slice> std::ranges::iota(ret, 0); return ret; } - else if constexpr (is_strided_slice<Slice>) + else if constexpr (is_extent_slice<Slice>) { auto ret = std::vector<IndexType>{}; size_t n = static_cast<size_t>(slice.extent); @@ -292,10 +292,10 @@ template<typename Layout> check_selection<Layout>(exts, collapse{}, s, collapse{}); }; - check(std::strided_slice(0, 1, 2)); - check(std::strided_slice(0, 2, 2)); - check(std::strided_slice(1, 2, 2)); - check(std::strided_slice(1, std::cw<2>, std::cw<2>)); + check(std::extent_slice(0, 1, 2)); + check(std::extent_slice(0, 2, 2)); + check(std::extent_slice(1, 2, 2)); + check(std::extent_slice(1, std::cw<2>, std::cw<2>)); return true; } @@ -303,9 +303,9 @@ template<typename Layout> constexpr bool test_strided_box_selection(auto exts) { - auto s0 = std::strided_slice(0, 2, 2); - auto s1 = std::strided_slice(1, 2, 2); - auto s2 = std::strided_slice(0, 3, 3); + auto s0 = std::extent_slice(0, 2, 2); + auto s1 = std::extent_slice(1, 2, 2); + auto s2 = std::extent_slice(0, 3, 3); check_selection<Layout>(exts, s0, s1, s2); return true; diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/subextents.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/subextents.cc index 379fb79dfc23..35927a0276e6 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/subextents.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/subextents.cc @@ -82,13 +82,13 @@ template<typename Int> template<template<int> typename Cw> constexpr bool - test_from_strided_slice() + test_from_extent_slice() { auto exts = std::extents<int, 5, 7, 11>{}; { auto s0 = 1; - auto s1 = std::strided_slice{0, 0, 0}; - auto s2 = std::strided_slice{1, Cw<0>{}, 0}; + auto s1 = std::extent_slice{0, 0, 0}; + auto s2 = std::extent_slice{1, Cw<0>{}, 0}; auto sub_exts = std::subextents(exts, s0, s1, s2); VERIFY(sub_exts.rank() == 2); VERIFY(sub_exts.static_extent(0) == dyn); @@ -98,8 +98,8 @@ template<template<int> typename Cw> { auto s0 = 1; - auto s1 = std::strided_slice{0, 2, Cw<1>{}}; - auto s2 = std::strided_slice{1, Cw<2>{}, 1}; + auto s1 = std::extent_slice{0, 2, Cw<1>{}}; + auto s2 = std::extent_slice{1, Cw<2>{}, 1}; auto sub_exts = std::subextents(exts, s0, s1, s2); VERIFY(sub_exts.rank() == 2); VERIFY(sub_exts.static_extent(0) == dyn); @@ -110,8 +110,8 @@ template<template<int> typename Cw> { // selected = 1 x [1, 3] x [1, 4, 7, 10] auto s0 = 1; - auto s1 = std::strided_slice{1, Cw<2>{}, 2}; - auto s2 = std::strided_slice{1, Cw<4>{}, Cw<3>{}}; + auto s1 = std::extent_slice{1, Cw<2>{}, 2}; + auto s2 = std::extent_slice{1, Cw<4>{}, Cw<3>{}}; auto sub_exts = std::subextents(exts, s0, s1, s2); VERIFY(sub_exts.rank() == 2); VERIFY(sub_exts.static_extent(0) == 2); @@ -120,9 +120,9 @@ template<template<int> typename Cw> { // selected = [0, 2] x [1, 3] x [0, 3, 6] - auto s0 = std::strided_slice(0, 2, 2); - auto s1 = std::strided_slice(1, 2, 2); - auto s2 = std::strided_slice(0, 3, 3); + auto s0 = std::extent_slice(0, 2, 2); + auto s1 = std::extent_slice(1, 2, 2); + auto s2 = std::extent_slice(0, 3, 3); auto sub_exts = std::subextents(exts, s0, s1, s2); VERIFY(sub_exts.rank() == 3); VERIFY(sub_exts.extent(0) == 2); @@ -132,9 +132,9 @@ template<template<int> typename Cw> { // selected = [0] x [1] x [2] - auto s0 = std::strided_slice(0, 1, 99); - auto s1 = std::strided_slice(1, 1, 99); - auto s2 = std::strided_slice(2, 1, 99); + auto s0 = std::extent_slice(0, 1, 99); + auto s1 = std::extent_slice(1, 1, 99); + auto s2 = std::extent_slice(2, 1, 99); auto sub_exts = std::subextents(exts, s0, s1, s2); VERIFY(sub_exts.rank() == 3); VERIFY(sub_exts.extent(0) == 1); @@ -248,8 +248,8 @@ test_all() test_from_pair_all<IC>(); test_from_const_int<CW>(); test_from_const_int<IC>(); - test_from_strided_slice<CW>(); - test_from_strided_slice<IC>(); + test_from_extent_slice<CW>(); + test_from_extent_slice<IC>(); test_from_triple_all<CW>(); test_from_triple_all<IC>(); test_from_int_like_in_tuple<StructuralInt>(); diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/subextents_neg.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/subextents_neg.cc index 5b11424680df..2ff419ec50cd 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/subextents_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/subextents_neg.cc @@ -19,7 +19,7 @@ constexpr bool test_invalid_stride_zero() { auto exts = std::extents(3, 5, 7); - auto s = std::strided_slice{0, 2, 0}; + auto s = std::extent_slice{0, 2, 0}; auto sub_exts = std::subextents(exts, 1, s, 2); // { dg-error "expansion of" } return true; } @@ -33,13 +33,13 @@ test_out_of_bounds(const Slice& slice) auto sub_exts = std::subextents(exts, 1, slice, 2); // { dg-error "expansion of" } return true; } -static_assert(test_out_of_bounds(std::strided_slice{0, 6, 1})); // { dg-error "expansion of" } -static_assert(test_out_of_bounds(std::strided_slice{0, 4, 2})); // { dg-error "expansion of" } -static_assert(test_out_of_bounds(std::strided_slice{1, 6, 1})); // { dg-error "expansion of" } -static_assert(test_out_of_bounds(std::strided_slice{1, 4, 2})); // { dg-error "expansion of" } +static_assert(test_out_of_bounds(std::extent_slice{0, 6, 1})); // { dg-error "expansion of" } +static_assert(test_out_of_bounds(std::extent_slice{0, 4, 2})); // { dg-error "expansion of" } +static_assert(test_out_of_bounds(std::extent_slice{1, 6, 1})); // { dg-error "expansion of" } +static_assert(test_out_of_bounds(std::extent_slice{1, 4, 2})); // { dg-error "expansion of" } static_assert(test_out_of_bounds(std::tuple{1, 6})); // { dg-error "expansion of" } static_assert(test_out_of_bounds(std::tuple{std::cw<1>, std::cw<6>})); // { dg-error "expansion of" } -static_assert(test_out_of_bounds(std::strided_slice{-1, 2, 1})); // { dg-error "expansion of" } +static_assert(test_out_of_bounds(std::extent_slice{-1, 2, 1})); // { dg-error "expansion of" } static_assert(test_out_of_bounds(std::tuple{-1, 2})); // { dg-error "expansion of" } // { dg-prune-output "cannot decompose class type 'NotASlice'" } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc index efd71d10f9d9..f52d752079ed 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc @@ -34,7 +34,7 @@ template<typename Layout> auto exts = Traits::make_extents(std::dims<5, int>(3, 5, 7, 11, 13)); auto m = typename Layout::mapping(exts); - auto s251 = std::strided_slice{2, 5, std::cw<1>}; + auto s251 = std::extent_slice{2, 5, std::cw<1>}; { auto slices = std::tuple{0, 0, 0, 0, 0}; @@ -44,7 +44,7 @@ template<typename Layout> } { - auto s0 = std::strided_slice{1, 1, std::cw<1>}; + auto s0 = std::extent_slice{1, 1, std::cw<1>}; auto slices = std::tuple{s0, all, all, s251, 0}; auto result = call_submdspan_mapping(m, Traits::make_tuple(slices)); using layout_type = typename decltype(result.mapping)::layout_type; @@ -52,7 +52,7 @@ template<typename Layout> } { - auto s0 = std::strided_slice{1, 2, std::cw<1>}; + auto s0 = std::extent_slice{1, 2, std::cw<1>}; auto slices = std::tuple{s0, all, all, s251, 0}; auto result = call_submdspan_mapping(m, Traits::make_tuple(slices)); using layout_type = typename decltype(result.mapping)::layout_type; @@ -60,7 +60,7 @@ template<typename Layout> } { - auto s0 = std::strided_slice{1, 2, std::cw<1>}; + auto s0 = std::extent_slice{1, 2, std::cw<1>}; auto slices = std::tuple{s0, 0, all, s251, 0}; auto result = call_submdspan_mapping(m, Traits::make_tuple(slices)); using layout_type = typename decltype(result.mapping)::layout_type; @@ -68,7 +68,7 @@ template<typename Layout> } { - auto s0 = std::strided_slice{1, 2, 1}; + auto s0 = std::extent_slice{1, 2, 1}; auto slices = std::tuple{s0, all, all, s251, 0}; auto result = call_submdspan_mapping(m, Traits::make_tuple(slices)); using layout_type = decltype(result.mapping)::layout_type; @@ -83,7 +83,7 @@ template<typename Layout> } { - auto s3 = std::strided_slice{2, std::cw<7>, std::cw<2>}; + auto s3 = std::extent_slice{2, std::cw<7>, std::cw<2>}; auto slices = std::tuple{all, all, all, s3, 0}; auto result = call_submdspan_mapping(m, Traits::make_tuple(slices)); using layout_type = decltype(result.mapping)::layout_type; @@ -101,7 +101,7 @@ template<typename Layout> auto exts = Traits::make_extents(std::dims<5, int>(3, 5, 7, 11, 13)); auto m = typename Layout::mapping(exts); - auto s251 = std::strided_slice{2, 5, std::cw<1>}; + auto s251 = std::extent_slice{2, 5, std::cw<1>}; { auto slices = std::tuple{all, all, all, s251, 0}; @@ -121,7 +121,7 @@ template<typename Layout> auto exts = Traits::make_extents(std::dims<5, int>(3, 5, 7, 11, 13)); auto m = typename Layout::mapping(exts); - auto s251 = std::strided_slice{2, 5, std::cw<1>}; + auto s251 = std::extent_slice{2, 5, std::cw<1>}; { auto slices = std::tuple{all, all, all, s251, 0}; @@ -140,7 +140,7 @@ template<typename Layout> } { - auto s121 = std::strided_slice{1, 2, std::cw<1>}; + auto s121 = std::extent_slice{1, 2, std::cw<1>}; auto slices = std::tuple{s121, 0, 0, 0, 0}; auto result = call_submdspan_mapping(m, Traits::make_tuple(slices)); using layout_type = typename decltype(result.mapping)::layout_type; @@ -149,7 +149,7 @@ template<typename Layout> } { - auto s121 = std::strided_slice{1, 2, std::cw<1>}; + auto s121 = std::extent_slice{1, 2, std::cw<1>}; auto slices = std::tuple{0, s121, 0, 0, 0}; auto result = call_submdspan_mapping(m, Traits::make_tuple(slices)); using layout_type = typename decltype(result.mapping)::layout_type; @@ -163,8 +163,8 @@ template<typename Layout> test_layout_unpadded_padding_value() { using Traits = LayoutTraits<DeducePaddingSide::from_typename<Layout>()>; - auto s0 = std::strided_slice{size_t(1), size_t(2), std::cw<size_t(1)>}; - auto s3 = std::strided_slice{size_t(2), size_t(5), std::cw<size_t(1)>}; + auto s0 = std::extent_slice{size_t(1), size_t(2), std::cw<size_t(1)>}; + auto s3 = std::extent_slice{size_t(2), size_t(5), std::cw<size_t(1)>}; auto check = [&](auto exts, size_t expected) { @@ -196,8 +196,8 @@ template<typename Layout> test_layout_padded_padding_value() { using Traits = LayoutTraits<DeducePaddingSide::from_typename<Layout>()>; - auto s0 = std::strided_slice{size_t(1), size_t(2), std::cw<size_t(1)>}; - auto s3 = std::strided_slice{size_t(2), size_t(5), std::cw<size_t(1)>}; + auto s0 = std::extent_slice{size_t(1), size_t(2), std::cw<size_t(1)>}; + auto s3 = std::extent_slice{size_t(2), size_t(5), std::cw<size_t(1)>}; auto check = [&](auto exts, size_t expected) { @@ -235,8 +235,8 @@ test_layout_stride_return_types() auto m = std::layout_stride::mapping(exts, std::array{2, 12}); using index_type = decltype(exts)::index_type; - auto s1 = std::strided_slice{index_type(2), index_type(2), - std::cw<index_type(2)>}; + auto s1 = std::extent_slice{index_type(2), index_type(2), + std::cw<index_type(2)>}; auto result = submdspan_mapping(m, index_type(1), s1); using layout_type = decltype(result.mapping)::layout_type; static_assert(std::same_as<layout_type, std::layout_stride>); diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_neg.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_neg.cc index 74fccc6f014b..8e673a084339 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_neg.cc @@ -73,47 +73,47 @@ static_assert(test_tuple_over<std::layout_stride>()); // { dg-error "expansion o template<typename Layout> constexpr bool - test_strided_slice_zero() + test_extent_slice_zero() { - check_slice_range<Layout>(1, std::strided_slice{1, 2, 0}, 2); // { dg-error "expansion of" } + check_slice_range<Layout>(1, std::extent_slice{1, 2, 0}, 2); // { dg-error "expansion of" } return true; } -static_assert(test_strided_slice_zero<std::layout_left>()); // { dg-error "expansion of" } -static_assert(test_strided_slice_zero<std::layout_right>()); // { dg-error "expansion of" } -static_assert(test_strided_slice_zero<std::layout_stride>()); // { dg-error "expansion of" } +static_assert(test_extent_slice_zero<std::layout_left>()); // { dg-error "expansion of" } +static_assert(test_extent_slice_zero<std::layout_right>()); // { dg-error "expansion of" } +static_assert(test_extent_slice_zero<std::layout_stride>()); // { dg-error "expansion of" } template<typename Layout> constexpr bool - test_strided_slice_offset_under() + test_extent_slice_offset_under() { - check_slice_range<Layout>(1, std::strided_slice{-1, 1, 1}, 2); // { dg-error "expansion of" } + check_slice_range<Layout>(1, std::extent_slice{-1, 1, 1}, 2); // { dg-error "expansion of" } return true; } -static_assert(test_strided_slice_offset_under<std::layout_left>()); // { dg-error "expansion of" } -static_assert(test_strided_slice_offset_under<std::layout_right>()); // { dg-error "expansion of" } -static_assert(test_strided_slice_offset_under<std::layout_stride>()); // { dg-error "expansion of" } +static_assert(test_extent_slice_offset_under<std::layout_left>()); // { dg-error "expansion of" } +static_assert(test_extent_slice_offset_under<std::layout_right>()); // { dg-error "expansion of" } +static_assert(test_extent_slice_offset_under<std::layout_stride>()); // { dg-error "expansion of" } template<typename Layout> constexpr bool - test_strided_slice_offset_over() + test_extent_slice_offset_over() { - check_slice_range<Layout>(1, std::strided_slice{6, 0, 1}, 2); // { dg-error "expansion of" } + check_slice_range<Layout>(1, std::extent_slice{6, 0, 1}, 2); // { dg-error "expansion of" } return true; } -static_assert(test_strided_slice_offset_over<std::layout_left>()); // { dg-error "expansion of" } -static_assert(test_strided_slice_offset_over<std::layout_right>()); // { dg-error "expansion of" } -static_assert(test_strided_slice_offset_over<std::layout_stride>()); // { dg-error "expansion of" } +static_assert(test_extent_slice_offset_over<std::layout_left>()); // { dg-error "expansion of" } +static_assert(test_extent_slice_offset_over<std::layout_right>()); // { dg-error "expansion of" } +static_assert(test_extent_slice_offset_over<std::layout_stride>()); // { dg-error "expansion of" } template<typename Layout> constexpr bool - test_strided_slice_extent_over() + test_extent_slice_extent_over() { - check_slice_range<Layout>(1, std::strided_slice{1, 5, 1}, 2); // { dg-error "expansion of" } + check_slice_range<Layout>(1, std::extent_slice{1, 5, 1}, 2); // { dg-error "expansion of" } return true; } -static_assert(test_strided_slice_extent_over<std::layout_left>()); // { dg-error "expansion of" } -static_assert(test_strided_slice_extent_over<std::layout_right>()); // { dg-error "expansion of" } -static_assert(test_strided_slice_extent_over<std::layout_stride>()); // { dg-error "expansion of" } +static_assert(test_extent_slice_extent_over<std::layout_left>()); // { dg-error "expansion of" } +static_assert(test_extent_slice_extent_over<std::layout_right>()); // { dg-error "expansion of" } +static_assert(test_extent_slice_extent_over<std::layout_stride>()); // { dg-error "expansion of" } // { dg-prune-output "static assertion failed" } // { dg-prune-output "__glibcxx_assert_fail" }
