Skip to content

Conversation

boomanaiden154
Copy link
Contributor

This patch includes __fwd/span.h in so that we get the
declaration of dynamic_extent inside . We also clean up quite a
few tests that were manually included for dynamic_extent.

This is based on feedback from #142693.

@boomanaiden154 boomanaiden154 requested a review from a team as a code owner June 5, 2025 08:38
@llvmbot llvmbot added the libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi. label Jun 5, 2025
@llvmbot
Copy link
Member

llvmbot commented Jun 5, 2025

@llvm/pr-subscribers-libcxx

Author: Aiden Grossman (boomanaiden154)

Changes

This patch includes __fwd/span.h in <mdspan> so that we get the
declaration of dynamic_extent inside <mdspan>. We also clean up quite a
few tests that were manually included <span> for dynamic_extent.

This is based on feedback from #142693.


Patch is 28.16 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/142925.diff

56 Files Affected:

  • (modified) libcxx/include/mdspan (+1)
  • (modified) libcxx/test/std/containers/views/mdspan/CustomTestLayouts.h (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/extents/comparison.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/extents/conversion.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/extents/ctad.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/extents/dextents.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/extents/dims.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/extents/index_type.verify.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/extents/obs_static.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/extents/types.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_left/comparison.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_left/ctor.default.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_left/ctor.extents.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_left/ctor.layout_right.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_left/ctor.layout_stride.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_left/ctor.mapping.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_left/index_operator.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_left/properties.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_left/required_span_size.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_left/static_requirements.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_left/stride.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_right/comparison.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_right/ctor.default.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_right/ctor.extents.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_right/ctor.layout_left.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_right/ctor.layout_stride.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_right/ctor.mapping.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_right/index_operator.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_right/properties.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_right/required_span_size.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_right/static_requirements.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_right/stride.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_stride/comparison.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_stride/ctor.default.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_stride/ctor.extents_array.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_stride/ctor.strided_mapping.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_stride/index_operator.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_stride/is_exhaustive_corner_case.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_stride/properties.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_stride/required_span_size.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_stride/static_requirements.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/layout_stride/stride.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/mdspan/assign.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/mdspan/conversion.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/mdspan/ctor.copy.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/mdspan/ctor.default.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/mdspan/ctor.dh_array.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/mdspan/ctor.dh_extents.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/mdspan/ctor.dh_integers.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/mdspan/ctor.dh_map.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/mdspan/ctor.dh_map_acc.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/mdspan/ctor.move.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/mdspan/move.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/mdspan/properties.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/mdspan/swap.pass.cpp (-1)
  • (modified) libcxx/test/std/containers/views/mdspan/mdspan/types.pass.cpp (-1)
diff --git a/libcxx/include/mdspan b/libcxx/include/mdspan
index 43982e0f339b8..06d2fb6fcd026 100644
--- a/libcxx/include/mdspan
+++ b/libcxx/include/mdspan
@@ -450,6 +450,7 @@ namespace std {
 #  include <__config>
 
 #  if _LIBCPP_STD_VER >= 23
+#    include <__fwd/span.h>
 #    include <__fwd/mdspan.h>
 #    include <__mdspan/default_accessor.h>
 #    include <__mdspan/extents.h>
diff --git a/libcxx/test/std/containers/views/mdspan/CustomTestLayouts.h b/libcxx/test/std/containers/views/mdspan/CustomTestLayouts.h
index 7cd42139758e3..588a5e9774a55 100644
--- a/libcxx/test/std/containers/views/mdspan/CustomTestLayouts.h
+++ b/libcxx/test/std/containers/views/mdspan/CustomTestLayouts.h
@@ -25,7 +25,6 @@
 #include <cstddef>
 #include <limits>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <type_traits>
 #include <utility>
 
diff --git a/libcxx/test/std/containers/views/mdspan/extents/comparison.pass.cpp b/libcxx/test/std/containers/views/mdspan/extents/comparison.pass.cpp
index 1d713044e60f7..65bb5475353d3 100644
--- a/libcxx/test/std/containers/views/mdspan/extents/comparison.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/extents/comparison.pass.cpp
@@ -20,7 +20,6 @@
 #include <cassert>
 #include <cstddef>
 #include <mdspan>
-#include <span> // dynamic_extent
 
 #include "test_macros.h"
 
diff --git a/libcxx/test/std/containers/views/mdspan/extents/conversion.pass.cpp b/libcxx/test/std/containers/views/mdspan/extents/conversion.pass.cpp
index 7baaa7ec9898e..4b6b1a63b80f9 100644
--- a/libcxx/test/std/containers/views/mdspan/extents/conversion.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/extents/conversion.pass.cpp
@@ -32,7 +32,6 @@
 #include <cstddef>
 #include <limits>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <type_traits>
 
 template <class To, class From>
diff --git a/libcxx/test/std/containers/views/mdspan/extents/ctad.pass.cpp b/libcxx/test/std/containers/views/mdspan/extents/ctad.pass.cpp
index 82f111153ce6a..b72c3e050b1f9 100644
--- a/libcxx/test/std/containers/views/mdspan/extents/ctad.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/extents/ctad.pass.cpp
@@ -19,7 +19,6 @@
 #include <cassert>
 #include <cstddef>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <type_traits>
 
 #include "../ConvertibleToIntegral.h"
diff --git a/libcxx/test/std/containers/views/mdspan/extents/dextents.pass.cpp b/libcxx/test/std/containers/views/mdspan/extents/dextents.pass.cpp
index 2adfa49d3bc47..a9fc8f3bed074 100644
--- a/libcxx/test/std/containers/views/mdspan/extents/dextents.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/extents/dextents.pass.cpp
@@ -18,7 +18,6 @@
 
 #include <mdspan>
 #include <cstddef>
-#include <span> // dynamic_extent
 
 #include "test_macros.h"
 
diff --git a/libcxx/test/std/containers/views/mdspan/extents/dims.pass.cpp b/libcxx/test/std/containers/views/mdspan/extents/dims.pass.cpp
index 0476c11efdb64..e74bc0e66fca1 100644
--- a/libcxx/test/std/containers/views/mdspan/extents/dims.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/extents/dims.pass.cpp
@@ -18,7 +18,6 @@
 
 #include <mdspan>
 #include <cstddef>
-#include <span> // dynamic_extent
 
 #include "test_macros.h"
 
diff --git a/libcxx/test/std/containers/views/mdspan/extents/index_type.verify.cpp b/libcxx/test/std/containers/views/mdspan/extents/index_type.verify.cpp
index cdc0464251419..ba6941a1ab4c1 100644
--- a/libcxx/test/std/containers/views/mdspan/extents/index_type.verify.cpp
+++ b/libcxx/test/std/containers/views/mdspan/extents/index_type.verify.cpp
@@ -19,7 +19,6 @@
 #include <cstddef>
 #include <climits>
 #include <mdspan>
-#include <span> // dynamic_extent
 
 void invalid_index_types() {
   // expected-error@*:* {{static assertion failed: extents::index_type must be a signed or unsigned integer type}}
diff --git a/libcxx/test/std/containers/views/mdspan/extents/obs_static.pass.cpp b/libcxx/test/std/containers/views/mdspan/extents/obs_static.pass.cpp
index 1d5f61d02e4ff..12d5e5a85f64e 100644
--- a/libcxx/test/std/containers/views/mdspan/extents/obs_static.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/extents/obs_static.pass.cpp
@@ -29,7 +29,6 @@
 #include <cassert>
 #include <cstddef>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <utility>
 
 #include "test_macros.h"
diff --git a/libcxx/test/std/containers/views/mdspan/extents/types.pass.cpp b/libcxx/test/std/containers/views/mdspan/extents/types.pass.cpp
index 10bc769473951..5b28a58e06c47 100644
--- a/libcxx/test/std/containers/views/mdspan/extents/types.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/extents/types.pass.cpp
@@ -26,7 +26,6 @@
 #include <concepts>
 #include <cstddef>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <type_traits>
 
 #include "test_macros.h"
diff --git a/libcxx/test/std/containers/views/mdspan/layout_left/comparison.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_left/comparison.pass.cpp
index 151da5ba61740..6db8fa48f5def 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_left/comparison.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_left/comparison.pass.cpp
@@ -18,7 +18,6 @@
 #include <cassert>
 #include <cstddef>
 #include <mdspan>
-#include <span> // dynamic_extent
 
 #include "test_macros.h"
 
diff --git a/libcxx/test/std/containers/views/mdspan/layout_left/ctor.default.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_left/ctor.default.pass.cpp
index 12c59a4caf10e..7fb657e9debb3 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_left/ctor.default.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_left/ctor.default.pass.cpp
@@ -18,7 +18,6 @@
 #include <cstddef>
 #include <cstdint>
 #include <mdspan>
-#include <span> // dynamic_extent
 
 #include "test_macros.h"
 
diff --git a/libcxx/test/std/containers/views/mdspan/layout_left/ctor.extents.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_left/ctor.extents.pass.cpp
index 299012dc5af84..c13775c8ba75f 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_left/ctor.extents.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_left/ctor.extents.pass.cpp
@@ -21,7 +21,6 @@
 #include <cstddef>
 #include <cstdint>
 #include <mdspan>
-#include <span> // dynamic_extent
 
 #include "test_macros.h"
 
diff --git a/libcxx/test/std/containers/views/mdspan/layout_left/ctor.layout_right.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_left/ctor.layout_right.pass.cpp
index 1e8f8fb54d5ef..f7ea39acf0179 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_left/ctor.layout_right.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_left/ctor.layout_right.pass.cpp
@@ -24,7 +24,6 @@
 #include <cstddef>
 #include <limits>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <type_traits>
 
 #include "test_macros.h"
diff --git a/libcxx/test/std/containers/views/mdspan/layout_left/ctor.layout_stride.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_left/ctor.layout_stride.pass.cpp
index 1668c26a697d4..cbd759eaf72cb 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_left/ctor.layout_stride.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_left/ctor.layout_stride.pass.cpp
@@ -27,7 +27,6 @@
 #include <cassert>
 #include <cstddef>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <type_traits>
 
 #include "test_macros.h"
diff --git a/libcxx/test/std/containers/views/mdspan/layout_left/ctor.mapping.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_left/ctor.mapping.pass.cpp
index 737e5f3d25728..28749327033aa 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_left/ctor.mapping.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_left/ctor.mapping.pass.cpp
@@ -22,7 +22,6 @@
 #include <cstddef>
 #include <limits>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <type_traits>
 
 #include "test_macros.h"
diff --git a/libcxx/test/std/containers/views/mdspan/layout_left/index_operator.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_left/index_operator.pass.cpp
index 75fd37055ad60..55d9539d8c63f 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_left/index_operator.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_left/index_operator.pass.cpp
@@ -27,7 +27,6 @@
 #include <cstddef>
 #include <cstdint>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <type_traits>
 
 #include "test_macros.h"
diff --git a/libcxx/test/std/containers/views/mdspan/layout_left/properties.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_left/properties.pass.cpp
index 32442ecd5a0e6..e252e0ec73a78 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_left/properties.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_left/properties.pass.cpp
@@ -29,7 +29,6 @@
 #include <cassert>
 #include <cstddef>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <utility>
 
 #include "test_macros.h"
diff --git a/libcxx/test/std/containers/views/mdspan/layout_left/required_span_size.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_left/required_span_size.pass.cpp
index 9ad61b0799c15..174c9633c2677 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_left/required_span_size.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_left/required_span_size.pass.cpp
@@ -18,7 +18,6 @@
 #include <cstddef>
 #include <cstdint>
 #include <mdspan>
-#include <span> // dynamic_extent
 
 #include "test_macros.h"
 
diff --git a/libcxx/test/std/containers/views/mdspan/layout_left/static_requirements.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_left/static_requirements.pass.cpp
index 6410fecdab59e..7b42e5045854a 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_left/static_requirements.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_left/static_requirements.pass.cpp
@@ -79,7 +79,6 @@
 #include <cassert>
 #include <cstddef>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <type_traits>
 #include <utility>
 
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 064c279bcc49f..0b1f9f57ecabf 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
@@ -23,7 +23,6 @@
 #include <cassert>
 #include <cstdint>
 #include <cstdio>
-#include <span> // dynamic_extent
 
 #include "test_macros.h"
 
diff --git a/libcxx/test/std/containers/views/mdspan/layout_right/comparison.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_right/comparison.pass.cpp
index a65d7d39db8e2..bcf26e0f53866 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_right/comparison.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_right/comparison.pass.cpp
@@ -18,7 +18,6 @@
 #include <cassert>
 #include <cstddef>
 #include <mdspan>
-#include <span> // dynamic_extent
 
 #include "test_macros.h"
 
diff --git a/libcxx/test/std/containers/views/mdspan/layout_right/ctor.default.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_right/ctor.default.pass.cpp
index d644b0ff18d82..1ef377191404f 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_right/ctor.default.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_right/ctor.default.pass.cpp
@@ -18,7 +18,6 @@
 #include <cstddef>
 #include <cstdint>
 #include <mdspan>
-#include <span> // dynamic_extent
 
 #include "test_macros.h"
 
diff --git a/libcxx/test/std/containers/views/mdspan/layout_right/ctor.extents.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_right/ctor.extents.pass.cpp
index cd0cff838fac5..5579e5a0d3030 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_right/ctor.extents.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_right/ctor.extents.pass.cpp
@@ -21,7 +21,6 @@
 #include <cstddef>
 #include <cstdint>
 #include <mdspan>
-#include <span> // dynamic_extent
 
 #include "test_macros.h"
 
diff --git a/libcxx/test/std/containers/views/mdspan/layout_right/ctor.layout_left.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_right/ctor.layout_left.pass.cpp
index 994d98a803211..8f49b37732616 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_right/ctor.layout_left.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_right/ctor.layout_left.pass.cpp
@@ -24,7 +24,6 @@
 #include <cstddef>
 #include <limits>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <type_traits>
 
 #include "test_macros.h"
diff --git a/libcxx/test/std/containers/views/mdspan/layout_right/ctor.layout_stride.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_right/ctor.layout_stride.pass.cpp
index 89321f860dc3a..5886eba9d15ee 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_right/ctor.layout_stride.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_right/ctor.layout_stride.pass.cpp
@@ -27,7 +27,6 @@
 #include <cassert>
 #include <cstddef>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <type_traits>
 
 #include "test_macros.h"
diff --git a/libcxx/test/std/containers/views/mdspan/layout_right/ctor.mapping.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_right/ctor.mapping.pass.cpp
index ee00c688301ef..7a08f694f3103 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_right/ctor.mapping.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_right/ctor.mapping.pass.cpp
@@ -22,7 +22,6 @@
 #include <cstddef>
 #include <limits>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <type_traits>
 
 #include "test_macros.h"
diff --git a/libcxx/test/std/containers/views/mdspan/layout_right/index_operator.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_right/index_operator.pass.cpp
index e9362ed50df24..4623af7fb5b76 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_right/index_operator.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_right/index_operator.pass.cpp
@@ -27,7 +27,6 @@
 #include <cstddef>
 #include <cstdint>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <type_traits>
 
 #include "test_macros.h"
diff --git a/libcxx/test/std/containers/views/mdspan/layout_right/properties.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_right/properties.pass.cpp
index 857ec3cb05835..29204775c5f5c 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_right/properties.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_right/properties.pass.cpp
@@ -29,7 +29,6 @@
 #include <cassert>
 #include <cstddef>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <utility>
 
 #include "test_macros.h"
diff --git a/libcxx/test/std/containers/views/mdspan/layout_right/required_span_size.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_right/required_span_size.pass.cpp
index 2ffd1f41f9638..d19dccfe23aa2 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_right/required_span_size.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_right/required_span_size.pass.cpp
@@ -18,7 +18,6 @@
 #include <cstddef>
 #include <cstdint>
 #include <mdspan>
-#include <span> // dynamic_extent
 
 #include "test_macros.h"
 
diff --git a/libcxx/test/std/containers/views/mdspan/layout_right/static_requirements.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_right/static_requirements.pass.cpp
index b7e01d14532d4..b9add4da42827 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_right/static_requirements.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_right/static_requirements.pass.cpp
@@ -79,7 +79,6 @@
 #include <cassert>
 #include <cstddef>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <type_traits>
 #include <utility>
 
diff --git a/libcxx/test/std/containers/views/mdspan/layout_right/stride.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_right/stride.pass.cpp
index c04f07847c0be..7784c572e9cfe 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_right/stride.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_right/stride.pass.cpp
@@ -23,7 +23,6 @@
 #include <cassert>
 #include <cstdint>
 #include <cstdio>
-#include <span> // dynamic_extent
 
 #include "test_macros.h"
 
diff --git a/libcxx/test/std/containers/views/mdspan/layout_stride/comparison.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_stride/comparison.pass.cpp
index 7c9b4a4ded34d..37e20a3061f5f 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_stride/comparison.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_stride/comparison.pass.cpp
@@ -25,7 +25,6 @@
 #include <mdspan>
 #include <cassert>
 #include <concepts>
-#include <span> // dynamic_extent
 #include <type_traits>
 
 #include "test_macros.h"
diff --git a/libcxx/test/std/containers/views/mdspan/layout_stride/ctor.default.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_stride/ctor.default.pass.cpp
index 055986d80c726..27843805d91ba 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_stride/ctor.default.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_stride/ctor.default.pass.cpp
@@ -24,7 +24,6 @@
 #include <cstddef>
 #include <cstdint>
 #include <mdspan>
-#include <span> // dynamic_extent
 
 #include "test_macros.h"
 
diff --git a/libcxx/test/std/containers/views/mdspan/layout_stride/ctor.extents_array.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_stride/ctor.extents_array.pass.cpp
index bbda6d4a73631..380c5eb90c033 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_stride/ctor.extents_array.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_stride/ctor.extents_array.pass.cpp
@@ -32,7 +32,6 @@
 #include <cstddef>
 #include <cstdint>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <type_traits>
 
 #include "test_macros.h"
diff --git a/libcxx/test/std/containers/views/mdspan/layout_stride/ctor.strided_mapping.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_stride/ctor.strided_mapping.pass.cpp
index 6ba67ea2d0122..66946d2b77b65 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_stride/ctor.strided_mapping.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_stride/ctor.strided_mapping.pass.cpp
@@ -38,7 +38,6 @@
 #include <mdspan>
 #include <cassert>
 #include <limits>
-#include <span> // dynamic_extent
 #include <type_traits>
 
 #include "test_macros.h"
diff --git a/libcxx/test/std/containers/views/mdspan/layout_stride/index_operator.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_stride/index_operator.pass.cpp
index 5669991b8a13a..b483885049a7b 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_stride/index_operator.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_stride/index_operator.pass.cpp
@@ -27,7 +27,6 @@
 #include <array>
 #include <cassert>
 #include <cstdint>
-#include <span> // dynamic_extent
 #include <type_traits>
 
 #include "test_macros.h"
diff --git a/libcxx/test/std/containers/views/mdspan/layout_stride/is_exhaustive_corner_case.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_stride/is_exhaustive_corner_case.pass.cpp
index 9f51cc01cf9df..900adb42096a7 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_stride/is_exhaustive_corner_case.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_stride/is_exhaustive_corner_case.pass.cpp
@@ -23,7 +23,6 @@
 #include <cassert>
 #include <cstddef>
 #include <mdspan>
-#include <span> // dynamic_extent
 
 template <class E>
 constexpr void
diff --git a/libcxx/test/std/containers/views/mdspan/layout_stride/properties.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_stride/properties.pass.cpp
index eac1029882e3a..21ce56fcc65f1 100644
--- a/libcxx/test/std/containers/views/mdspan/layout_stride/properties.pass.cpp
+++ b/libcxx/test/std/containers/views/mdspan/layout_stride/properties.pass.cpp
@@ -43,7 +43,6 @@
 #include <concepts>
 #include <cstddef>
 #include <mdspan>
-#include <span> // dynamic_extent
 #include <type_traits>
 
 #include "test_macros.h"
diff --git a/libcxx/test/std/containers/views/mdspan/layout_stride/required_span_size.pass.cpp b/libcxx/test/std/containers/views/mdspan/layout_stride/required_span_size.pass.cpp
index 629849646bb22..cf1685f6676f9 100644
--- a/libcxx/test/std/containers/views/m...
[truncated]

Copy link

github-actions bot commented Jun 5, 2025

✅ With the latest revision this PR passed the C/C++ code formatter.

Created using spr 1.3.4
Copy link
Contributor

@philnik777 philnik777 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM with added comment.

ldionne pushed a commit that referenced this pull request Jun 5, 2025
This patch adds missing <span> includes for std::mdspan tests that use
std::span. There are other cases where we need dynamic_extent that are
handled in #142925.

This was found by running the test suite in the bootstrapping build
with Clang modules enabled.
carlosgalvezp and others added 3 commits June 7, 2025 12:57
Created using spr 1.3.6

[skip ci]
Created using spr 1.3.6
Created using spr 1.3.6
@boomanaiden154 boomanaiden154 changed the base branch from users/boomanaiden154/main.libcxx-include-__fwdspanh-in-mdspan to main June 8, 2025 21:58
@boomanaiden154 boomanaiden154 merged commit 20a6b63 into main Jun 8, 2025
58 of 62 checks passed
@boomanaiden154 boomanaiden154 deleted the users/boomanaiden154/libcxx-include-__fwdspanh-in-mdspan branch June 8, 2025 21:58
llvm-sync bot pushed a commit to arm/arm-toolchain that referenced this pull request Jun 8, 2025
This patch includes __fwd/span.h in <mdspan> so that we get the
declaration of dynamic_extent inside <mdspan>. We also clean up quite a
few tests that were manually included <span> for dynamic_extent.

This is based on feedback from #142693.

Reviewers: philnik777, ldionne

Reviewed By: philnik777

Pull Request: llvm/llvm-project#142925
tomtor pushed a commit to tomtor/llvm-project that referenced this pull request Jun 14, 2025
This patch includes __fwd/span.h in <mdspan> so that we get the
declaration of dynamic_extent inside <mdspan>. We also clean up quite a
few tests that were manually included <span> for dynamic_extent.

This is based on feedback from llvm#142693.

Reviewers: philnik777, ldionne

Reviewed By: philnik777

Pull Request: llvm#142925
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants