Skip to content

[libcxx] Include __fwd/span.h in <mdspan> #142925

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

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
boomanaiden154 added a commit to boomanaiden154/llvm-project that referenced this pull request Jun 5, 2025
This is needed to get these tests to pass in the following
configuration:

cmake -GNinja -DCMAKE_BUILD_TYPE=Release \
  -DLLVM_ENABLE_PROJECTS="clang" \
  -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \
  -DLIBCXX_TEST_PARAMS="enable_modules=clang" \
  -DLIBCXXABI_TEST_PARAMS="enable_modules=clang" \
  ../llvm

ninja check-cxx

(Within the premerge build).

This patch specifically handles some missing <span> includes for
invocations of std::span in these tests. There are some other cases
where we need dynamic_extent that are handled in llvm#142925.

This seems to be related to 5e19fd1 which
added in some similar includes.

Reviewers: ldionne, #reviewers-libcxx, philnik777

Pull Request: llvm#142693
boomanaiden154 added a commit to boomanaiden154/llvm-project that referenced this pull request Jun 5, 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.

Pull Request: llvm#142925
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
rorth pushed a commit to rorth/llvm-project that referenced this pull request Jun 11, 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 llvm#142925.

This was found by running the test suite in the bootstrapping build
with Clang modules enabled.
rorth pushed a commit to rorth/llvm-project that referenced this pull request Jun 11, 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
DhruvSrivastavaX pushed a commit to DhruvSrivastavaX/lldb-for-aix that referenced this pull request Jun 12, 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 llvm#142925.

This was found by running the test suite in the bootstrapping build
with Clang modules enabled.
DhruvSrivastavaX pushed a commit to DhruvSrivastavaX/lldb-for-aix that referenced this pull request Jun 12, 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
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