From 219cef0881be0088c77e326eb4ab22d58bca28a5 Mon Sep 17 00:00:00 2001 From: Christian Trott Date: Thu, 3 Aug 2023 21:35:23 -0600 Subject: [PATCH] [libc++][mdspan] Fix layout_left::stride(r) It was using the stride calculation of layout_right. Reviewed By: philnik Differential Revision: https://reviews.llvm.org/D157065 (cherry picked from commit 0f4d7d81c9d08512a3871596fa2a14b737233c80) --- libcxx/include/__mdspan/layout_left.h | 2 +- libcxx/test/std/containers/views/mdspan/layout_left/stride.pass.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libcxx/include/__mdspan/layout_left.h b/libcxx/include/__mdspan/layout_left.h index f890c5a..7503dcf 100644 --- a/libcxx/include/__mdspan/layout_left.h +++ b/libcxx/include/__mdspan/layout_left.h @@ -164,7 +164,7 @@ public: _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( __r < extents_type::rank(), "layout_left::mapping::stride(): invalid rank index"); index_type __s = 1; - for (rank_type __i = extents_type::rank() - 1; __i > __r; __i--) + for (rank_type __i = 0; __i < __r; __i++) __s *= __extents_.extent(__i); return __s; } diff --git a/libcxx/test/std/containers/views/mdspan/layout_left/stride.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_left/stride.pass.cpp index c10da3a..b5fc73b 100644 --- a/libcxx/test/std/containers/views/mdspan/layout_left/stride.pass.cpp +++ b/libcxx/test/std/containers/views/mdspan/layout_left/stride.pass.cpp @@ -39,8 +39,8 @@ constexpr bool test() { constexpr size_t D = std::dynamic_extent; test_stride>(std::array{1}, 7); test_stride>(std::array{1}); - test_stride>(std::array{8, 1}); - test_stride>(std::array{720, 90, 10, 1}, 7, 9, 10); + test_stride>(std::array{1, 7}); + test_stride>(std::array{1, 7, 56, 504}, 7, 9, 10); return true; } -- 2.7.4