[libcxx-commits] [libcxx] 0f4d7d8 - [libc++][mdspan] Fix layout_left::stride(r)
Christian Trott via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Aug 4 08:40:48 PDT 2023
Author: Christian Trott
Date: 2023-08-04T09:40:27-06:00
New Revision: 0f4d7d81c9d08512a3871596fa2a14b737233c80
URL: https://github.com/llvm/llvm-project/commit/0f4d7d81c9d08512a3871596fa2a14b737233c80
DIFF: https://github.com/llvm/llvm-project/commit/0f4d7d81c9d08512a3871596fa2a14b737233c80.diff
LOG: [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
Added:
Modified:
libcxx/include/__mdspan/layout_left.h
libcxx/test/std/containers/views/mdspan/layout_left/stride.pass.cpp
Removed:
################################################################################
diff --git a/libcxx/include/__mdspan/layout_left.h b/libcxx/include/__mdspan/layout_left.h
index f890c5ae025612..7503dcf77d1379 100644
--- a/libcxx/include/__mdspan/layout_left.h
+++ b/libcxx/include/__mdspan/layout_left.h
@@ -164,7 +164,7 @@ class layout_left::mapping {
_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 c10da3a0002afc..b5fc73b6fd5bfe 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::extents<unsigned, D>>(std::array<unsigned, 1>{1}, 7);
test_stride<std::extents<unsigned, 7>>(std::array<unsigned, 1>{1});
- test_stride<std::extents<unsigned, 7, 8>>(std::array<unsigned, 2>{8, 1});
- test_stride<std::extents<int64_t, D, 8, D, D>>(std::array<int64_t, 4>{720, 90, 10, 1}, 7, 9, 10);
+ test_stride<std::extents<unsigned, 7, 8>>(std::array<unsigned, 2>{1, 7});
+ test_stride<std::extents<int64_t, D, 8, D, D>>(std::array<int64_t, 4>{1, 7, 56, 504}, 7, 9, 10);
return true;
}
More information about the libcxx-commits
mailing list