aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libcxx/CMakeLists.txt9
-rw-r--r--libcxx/cmake/caches/Apple.cmake1
-rw-r--r--libcxx/docs/BuildingLibcxx.rst9
-rw-r--r--libcxx/include/__config_site.in2
-rw-r--r--libcxx/include/format4
-rw-r--r--libcxx/include/ranges4
-rw-r--r--libcxx/src/CMakeLists.txt7
-rw-r--r--libcxx/test/libcxx/double_include.sh.cpp8
-rw-r--r--libcxx/test/libcxx/inclusions/ranges.inclusions.compile.pass.cpp1
-rw-r--r--libcxx/test/libcxx/min_max_macros.compile.pass.cpp8
-rw-r--r--libcxx/test/libcxx/no_assert_include.compile.pass.cpp8
-rw-r--r--libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/assign.copy.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/assign.move.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/ctor.default.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/ctor.in_place.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/deref.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/has_value.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/no_unique_address.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/properties.compile.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/range.nonprop.cache/assign.copy.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/range.nonprop.cache/assign.move.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/range.nonprop.cache/constraints.compile.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/range.nonprop.cache/ctor.copy.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/range.nonprop.cache/ctor.default.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/range.nonprop.cache/ctor.move.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/range.nonprop.cache/deref.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/range.nonprop.cache/has_value.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/range.utility.helpers/different_from.compile.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/range.utility.helpers/has_arrow.compile.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/range.utility.helpers/simple_view.compile.pass.cpp1
-rw-r--r--libcxx/test/libcxx/ranges/version.compile.pass.cpp2
-rw-r--r--libcxx/test/libcxx/utilities/format/version.compile.pass.cpp2
-rw-r--r--libcxx/test/std/containers/associative/map/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/containers/associative/multimap/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/containers/associative/multiset/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/containers/associative/set/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/containers/sequences/array/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/containers/sequences/deque/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/containers/sequences/forwardlist/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/containers/sequences/list/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/containers/sequences/vector.bool/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/containers/sequences/vector/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/containers/unord/unord.map/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/containers/unord/unord.multimap/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/containers/unord/unord.multiset/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/containers/unord/unord.set/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/containers/views/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/input.output/filesystems/class.directory_iterator/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/input.output/filesystems/class.path/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/iterators/predef.iterators/iterators.common/assign.pass.cpp8
-rw-r--r--libcxx/test/std/language.support/support.limits/support.limits.general/format.version.pass.cpp2
-rw-r--r--libcxx/test/std/language.support/support.limits/support.limits.general/ranges.version.pass.cpp2
-rw-r--r--libcxx/test/std/ranges/range.access/range.access.begin/begin.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.access/range.access.begin/incomplete.compile.verify.cpp1
-rw-r--r--libcxx/test/std/ranges/range.access/range.access.cbegin/incomplete.compile.verify.cpp1
-rw-r--r--libcxx/test/std/ranges/range.access/range.access.cend/incomplete.compile.verify.cpp1
-rw-r--r--libcxx/test/std/ranges/range.access/range.access.end/end.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.access/range.access.end/incomplete.compile.verify.cpp1
-rw-r--r--libcxx/test/std/ranges/range.access/range.prim/data.incomplete.verify.cpp1
-rw-r--r--libcxx/test/std/ranges/range.access/range.prim/data.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.access/range.prim/empty.incomplete.verify.cpp1
-rw-r--r--libcxx/test/std/ranges/range.access/range.prim/empty.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.access/range.prim/size.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.access/range.prim/ssize.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.all/all.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.all/all_t.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.common.view/base.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.common.view/begin.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.common.view/borrowing.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.common.view/ctad.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.common.view/ctor.default.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.common.view/ctor.view.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.common.view/end.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.common.view/size.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.drop/base.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.drop/begin.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.drop/ctad.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.drop/ctor.default.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.drop/ctor.view.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.drop/dangling.cache.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.drop/end.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.drop/general.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.drop/size.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.empty/empty_view.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.ref.view.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.transform/base.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.transform/begin.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.transform/ctad.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.transform/end.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.transform/general.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.transform/iterator/arithmetic.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.transform/iterator/base.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.transform/iterator/compare.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.transform/iterator/ctor.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.transform/iterator/deref.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.transform/iterator/iter_move.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.transform/iterator/plus_minus.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.transform/iterator/requirements.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.transform/iterator/sentinel.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.transform/iterator/subscript.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.transform/iterator/types.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.adaptors/range.transform/size.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.range/borrowed_range.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.range/borrowed_range.subsumption.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.range/enable_borrowed_range.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.range/helper_aliases.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.range/iterator_t.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.range/range.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.range/range_size_t.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.range/sentinel_t.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.refinements/bidirectional_range.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.refinements/common_range.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.refinements/contiguous_range.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.refinements/forward_range.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.refinements/input_range.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.refinements/output_range.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.refinements/random_access_range.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.refinements/subsumption.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.refinements/viewable_range.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.sized/sized_range.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.sized/subsumption.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.view/enable_view.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.view/view.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.view/view.subsumption.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.req/range.view/view_base.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.utility/range.dangling/borrowed_iterator.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.utility/range.dangling/borrowed_subrange.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.utility/range.dangling/dangling.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.utility/range.subrange/access/advance.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.utility/range.subrange/access/get.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.utility/range.subrange/access/primitives.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.utility/range.subrange/ctad.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.utility/range.subrange/ctor/begin_end.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.utility/range.subrange/ctor/begin_end_size.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.utility/range.subrange/ctor/pair_like_conv.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.utility/range.subrange/ctor/range.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.utility/range.subrange/ctor/range_size.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.utility/range.subrange/enable_borrowed_range.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.utility/range.subrange/general.compile.pass.cpp1
-rw-r--r--libcxx/test/std/ranges/range.utility/view.interface/view.interface.pass.cpp1
-rw-r--r--libcxx/test/std/re/re.results/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/strings/basic.string/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/strings/string.view/range_concept_conformance.compile.pass.cpp1
-rw-r--r--libcxx/test/std/utilities/format/format.error/format.error.pass.cpp1
-rw-r--r--libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/advance_to.pass.cpp1
-rw-r--r--libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/begin.pass.cpp1
-rw-r--r--libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/check_arg_id.pass.cpp1
-rw-r--r--libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/ctor.pass.cpp1
-rw-r--r--libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/end.pass.cpp1
-rw-r--r--libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/next_arg_id.pass.cpp1
-rw-r--r--libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/types.compile.pass.cpp1
-rwxr-xr-xlibcxx/utils/generate_feature_test_macro_components.py2
-rwxr-xr-xlibcxx/utils/generate_header_inclusion_tests.py2
-rwxr-xr-xlibcxx/utils/generate_header_tests.py2
-rw-r--r--libcxx/utils/libcxx/test/features.py2
155 files changed, 213 insertions, 7 deletions
diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt
index 80c240d..b1e2535 100644
--- a/libcxx/CMakeLists.txt
+++ b/libcxx/CMakeLists.txt
@@ -123,6 +123,11 @@ option(LIBCXX_ENABLE_VENDOR_AVAILABILITY_ANNOTATIONS
to provide compile-time errors when using features unavailable on some version of
the shared library they shipped should turn this on and see `include/__availability`
for more details." OFF)
+option(LIBCXX_ENABLE_INCOMPLETE_FEATURES
+ "Whether to enable support for incomplete library features. Incomplete features
+ are new library features under development. These features don't guarantee
+ ABI stability nor the quality of completed library features. Vendors
+ shipping the library may want to disable this option." ON)
set(LIBCXX_TEST_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/test/configs/legacy.cfg.in" CACHE STRING
"The Lit testing configuration to use when running the tests.")
set(LIBCXX_TEST_PARAMS "" CACHE STRING
@@ -883,6 +888,10 @@ config_define_if_not(LIBCXX_ENABLE_FILESYSTEM _LIBCPP_HAS_NO_FILESYSTEM_LIBRARY)
config_define_if_not(LIBCXX_ENABLE_RANDOM_DEVICE _LIBCPP_HAS_NO_RANDOM_DEVICE)
config_define_if_not(LIBCXX_ENABLE_LOCALIZATION _LIBCPP_HAS_NO_LOCALIZATION)
config_define_if_not(LIBCXX_ENABLE_VENDOR_AVAILABILITY_ANNOTATIONS _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS)
+# Incomplete features get their own specific disabling flags. This makes it
+# easier to grep for target specific flags once the feature is complete.
+config_define_if_not(LIBCXX_ENABLE_INCOMPLETE_FEATURES _LIBCPP_HAS_NO_INCOMPLETE_FORMAT)
+config_define_if_not(LIBCXX_ENABLE_INCOMPLETE_FEATURES _LIBCPP_HAS_NO_INCOMPLETE_RANGES)
if (LIBCXX_ABI_DEFINES)
set(abi_defines)
diff --git a/libcxx/cmake/caches/Apple.cmake b/libcxx/cmake/caches/Apple.cmake
index d40a3bf..c884eb5 100644
--- a/libcxx/cmake/caches/Apple.cmake
+++ b/libcxx/cmake/caches/Apple.cmake
@@ -11,6 +11,7 @@ set(LIBCXX_CXX_ABI libcxxabi CACHE STRING "")
set(LIBCXX_HIDE_FROM_ABI_PER_TU_BY_DEFAULT ON CACHE BOOL "")
set(LIBCXX_ENABLE_DEBUG_MODE_SUPPORT OFF CACHE BOOL "")
set(LIBCXX_ENABLE_VENDOR_AVAILABILITY_ANNOTATIONS ON CACHE BOOL "")
+set(LIBCXX_ENABLE_INCOMPLETE_FEATURES OFF CACHE BOOL "")
set(LIBCXX_HERMETIC_STATIC_LIBRARY ON CACHE BOOL "")
set(LIBCXXABI_HERMETIC_STATIC_LIBRARY ON CACHE BOOL "")
diff --git a/libcxx/docs/BuildingLibcxx.rst b/libcxx/docs/BuildingLibcxx.rst
index 34e82f2..399f00b 100644
--- a/libcxx/docs/BuildingLibcxx.rst
+++ b/libcxx/docs/BuildingLibcxx.rst
@@ -251,6 +251,15 @@ libc++ specific options
This option can be used to enable or disable the filesystem components on
platforms that may not support them. For example on Windows.
+.. option:: LIBCXX_ENABLE_INCOMPLETE_FEATURES:BOOL
+
+ **Default**: ``ON``
+
+ Whether to enable support for incomplete library features. Incomplete features
+ are new library features under development. These features don't guarantee
+ ABI stability nor the quality of completed library features. Vendors
+ shipping the library may want to disable this option.
+
.. option:: LIBCXX_INSTALL_LIBRARY_DIR:PATH
**Default**: ``lib${LIBCXX_LIBDIR_SUFFIX}``
diff --git a/libcxx/include/__config_site.in b/libcxx/include/__config_site.in
index ec4d410..e202d92 100644
--- a/libcxx/include/__config_site.in
+++ b/libcxx/include/__config_site.in
@@ -34,6 +34,8 @@
#cmakedefine _LIBCPP_HAS_PARALLEL_ALGORITHMS
#cmakedefine _LIBCPP_HAS_NO_RANDOM_DEVICE
#cmakedefine _LIBCPP_HAS_NO_LOCALIZATION
+#cmakedefine _LIBCPP_HAS_NO_INCOMPLETE_FORMAT
+#cmakedefine _LIBCPP_HAS_NO_INCOMPLETE_RANGES
@_LIBCPP_ABI_DEFINES@
diff --git a/libcxx/include/format b/libcxx/include/format
index d3945f0..0ec4b85 100644
--- a/libcxx/include/format
+++ b/libcxx/include/format
@@ -60,6 +60,10 @@ namespace std {
#include <__format/format_parse_context.h>
#include <version>
+#if defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)
+# error "The Format library is not supported since libc++ has been configured with LIBCXX_ENABLE_INCOMPLETE_FEATURES disabled"
+#endif
+
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
#endif
diff --git a/libcxx/include/ranges b/libcxx/include/ranges
index e97e565..47f66fd 100644
--- a/libcxx/include/ranges
+++ b/libcxx/include/ranges
@@ -183,6 +183,10 @@ namespace std::ranges {
#include <type_traits>
#include <version>
+#if defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES)
+# error "The Ranges library is not supported since libc++ has been configured with LIBCXX_ENABLE_INCOMPLETE_FEATURES disabled"
+#endif
+
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
diff --git a/libcxx/src/CMakeLists.txt b/libcxx/src/CMakeLists.txt
index f8c4d3e..496429f 100644
--- a/libcxx/src/CMakeLists.txt
+++ b/libcxx/src/CMakeLists.txt
@@ -12,7 +12,6 @@ set(LIBCXX_SOURCES
condition_variable.cpp
condition_variable_destructor.cpp
exception.cpp
- format.cpp
functional.cpp
future.cpp
hash.cpp
@@ -74,6 +73,12 @@ if (LIBCXX_ENABLE_LOCALIZATION)
)
endif()
+if(LIBCXX_ENABLE_INCOMPLETE_FEATURES)
+ list(APPEND LIBCXX_SOURCES
+ format.cpp
+ )
+endif()
+
if(WIN32)
list(APPEND LIBCXX_SOURCES
support/win32/locale_win32.cpp
diff --git a/libcxx/test/libcxx/double_include.sh.cpp b/libcxx/test/libcxx/double_include.sh.cpp
index eb9de0b..0687406 100644
--- a/libcxx/test/libcxx/double_include.sh.cpp
+++ b/libcxx/test/libcxx/double_include.sh.cpp
@@ -91,7 +91,9 @@
# include <filesystem>
#endif
#include <float.h>
-#include <format>
+#ifndef _LIBCPP_HAS_NO_INCOMPLETE_FORMAT
+# include <format>
+#endif
#include <forward_list>
#ifndef _LIBCPP_HAS_NO_LOCALIZATION
# include <fstream>
@@ -143,7 +145,9 @@
#endif
#include <queue>
#include <random>
-#include <ranges>
+#ifndef _LIBCPP_HAS_NO_INCOMPLETE_RANGES
+# include <ranges>
+#endif
#include <ratio>
#ifndef _LIBCPP_HAS_NO_LOCALIZATION
# include <regex>
diff --git a/libcxx/test/libcxx/inclusions/ranges.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/ranges.inclusions.compile.pass.cpp
index 316d141..b6be285 100644
--- a/libcxx/test/libcxx/inclusions/ranges.inclusions.compile.pass.cpp
+++ b/libcxx/test/libcxx/inclusions/ranges.inclusions.compile.pass.cpp
@@ -12,6 +12,7 @@
// clang-format off
// UNSUPPORTED: c++03, c++11, c++14, c++17
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// <ranges>
diff --git a/libcxx/test/libcxx/min_max_macros.compile.pass.cpp b/libcxx/test/libcxx/min_max_macros.compile.pass.cpp
index 520fd3c..4c643d0 100644
--- a/libcxx/test/libcxx/min_max_macros.compile.pass.cpp
+++ b/libcxx/test/libcxx/min_max_macros.compile.pass.cpp
@@ -136,8 +136,10 @@ TEST_MACROS();
#endif
#include <float.h>
TEST_MACROS();
-#include <format>
+#ifndef _LIBCPP_HAS_NO_INCOMPLETE_FORMAT
+# include <format>
TEST_MACROS();
+#endif
#include <forward_list>
TEST_MACROS();
#ifndef _LIBCPP_HAS_NO_LOCALIZATION
@@ -218,8 +220,10 @@ TEST_MACROS();
TEST_MACROS();
#include <random>
TEST_MACROS();
-#include <ranges>
+#ifndef _LIBCPP_HAS_NO_INCOMPLETE_RANGES
+# include <ranges>
TEST_MACROS();
+#endif
#include <ratio>
TEST_MACROS();
#ifndef _LIBCPP_HAS_NO_LOCALIZATION
diff --git a/libcxx/test/libcxx/no_assert_include.compile.pass.cpp b/libcxx/test/libcxx/no_assert_include.compile.pass.cpp
index 60839d5..4269e3e 100644
--- a/libcxx/test/libcxx/no_assert_include.compile.pass.cpp
+++ b/libcxx/test/libcxx/no_assert_include.compile.pass.cpp
@@ -84,7 +84,9 @@
# include <filesystem>
#endif
#include <float.h>
-#include <format>
+#ifndef _LIBCPP_HAS_NO_INCOMPLETE_FORMAT
+# include <format>
+#endif
#include <forward_list>
#ifndef _LIBCPP_HAS_NO_LOCALIZATION
# include <fstream>
@@ -136,7 +138,9 @@
#endif
#include <queue>
#include <random>
-#include <ranges>
+#ifndef _LIBCPP_HAS_NO_INCOMPLETE_RANGES
+# include <ranges>
+#endif
#include <ratio>
#ifndef _LIBCPP_HAS_NO_LOCALIZATION
# include <regex>
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/assign.copy.pass.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/assign.copy.pass.cpp
index cfa0857..cdd2487 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/assign.copy.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/assign.copy.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// <copyable-box>& operator=(<copyable-box> const&)
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/assign.move.pass.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/assign.move.pass.cpp
index 7fbb7df..37cec07 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/assign.move.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/assign.move.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// <copyable-box>& operator=(<copyable-box>&&)
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/ctor.default.pass.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/ctor.default.pass.cpp
index e236d59..bca937d 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/ctor.default.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/ctor.default.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// <copyable-box>::<copyable-box>()
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/ctor.in_place.pass.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/ctor.in_place.pass.cpp
index 9018e72..512088c 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/ctor.in_place.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/ctor.in_place.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class ...Args>
// explicit <copyable-box>::<copyable-box>(in_place_t, Args&& ...args);
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/deref.pass.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/deref.pass.cpp
index 261bef2..c23438d 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/deref.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/deref.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// T& <copyable-box>::operator*()
// T const& <copyable-box>::operator*() const
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/has_value.pass.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/has_value.pass.cpp
index 705309d..d99d509 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/has_value.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/has_value.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// bool <copyable-box>::__has_value() const
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/no_unique_address.pass.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/no_unique_address.pass.cpp
index b8b5537..32e1e87 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/no_unique_address.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/no_unique_address.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// This test ensures that <copyable-box> behaves correctly when it holds an empty type.
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/properties.compile.pass.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/properties.compile.pass.cpp
index 3602a63..01bc638 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/properties.compile.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.copy.wrap/properties.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// Test various properties of <copyable-box>
diff --git a/libcxx/test/libcxx/ranges/range.nonprop.cache/assign.copy.pass.cpp b/libcxx/test/libcxx/ranges/range.nonprop.cache/assign.copy.pass.cpp
index cc574e0..a0021eb 100644
--- a/libcxx/test/libcxx/ranges/range.nonprop.cache/assign.copy.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.nonprop.cache/assign.copy.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// __non_propagating_cache& operator=(__non_propagating_cache const&);
diff --git a/libcxx/test/libcxx/ranges/range.nonprop.cache/assign.move.pass.cpp b/libcxx/test/libcxx/ranges/range.nonprop.cache/assign.move.pass.cpp
index 0a54e8c..6f4662e 100644
--- a/libcxx/test/libcxx/ranges/range.nonprop.cache/assign.move.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.nonprop.cache/assign.move.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// __non_propagating_cache& operator=(__non_propagating_cache&&);
diff --git a/libcxx/test/libcxx/ranges/range.nonprop.cache/constraints.compile.pass.cpp b/libcxx/test/libcxx/ranges/range.nonprop.cache/constraints.compile.pass.cpp
index ba9be62..5014171 100644
--- a/libcxx/test/libcxx/ranges/range.nonprop.cache/constraints.compile.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.nonprop.cache/constraints.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class T>
// requires is_object_v<T>
diff --git a/libcxx/test/libcxx/ranges/range.nonprop.cache/ctor.copy.pass.cpp b/libcxx/test/libcxx/ranges/range.nonprop.cache/ctor.copy.pass.cpp
index e1fadb3..027b0a2 100644
--- a/libcxx/test/libcxx/ranges/range.nonprop.cache/ctor.copy.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.nonprop.cache/ctor.copy.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// __non_propagating_cache(__non_propagating_cache const&);
diff --git a/libcxx/test/libcxx/ranges/range.nonprop.cache/ctor.default.pass.cpp b/libcxx/test/libcxx/ranges/range.nonprop.cache/ctor.default.pass.cpp
index 6ab9c2c..871cb25 100644
--- a/libcxx/test/libcxx/ranges/range.nonprop.cache/ctor.default.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.nonprop.cache/ctor.default.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// __non_propagating_cache();
diff --git a/libcxx/test/libcxx/ranges/range.nonprop.cache/ctor.move.pass.cpp b/libcxx/test/libcxx/ranges/range.nonprop.cache/ctor.move.pass.cpp
index c4dac84..6c3fbb3 100644
--- a/libcxx/test/libcxx/ranges/range.nonprop.cache/ctor.move.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.nonprop.cache/ctor.move.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// __non_propagating_cache(__non_propagating_cache&&);
diff --git a/libcxx/test/libcxx/ranges/range.nonprop.cache/deref.pass.cpp b/libcxx/test/libcxx/ranges/range.nonprop.cache/deref.pass.cpp
index 53baf35..18c0ce2 100644
--- a/libcxx/test/libcxx/ranges/range.nonprop.cache/deref.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.nonprop.cache/deref.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// constexpr T const& operator*() const;
// constexpr T& operator*();
diff --git a/libcxx/test/libcxx/ranges/range.nonprop.cache/has_value.pass.cpp b/libcxx/test/libcxx/ranges/range.nonprop.cache/has_value.pass.cpp
index 873b7a7..fdffefd 100644
--- a/libcxx/test/libcxx/ranges/range.nonprop.cache/has_value.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.nonprop.cache/has_value.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// constexpr bool __has_value() const;
diff --git a/libcxx/test/libcxx/ranges/range.utility.helpers/different_from.compile.pass.cpp b/libcxx/test/libcxx/ranges/range.utility.helpers/different_from.compile.pass.cpp
index ecea0ee..f517a82 100644
--- a/libcxx/test/libcxx/ranges/range.utility.helpers/different_from.compile.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.utility.helpers/different_from.compile.pass.cpp
@@ -11,6 +11,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
#include <ranges>
diff --git a/libcxx/test/libcxx/ranges/range.utility.helpers/has_arrow.compile.pass.cpp b/libcxx/test/libcxx/ranges/range.utility.helpers/has_arrow.compile.pass.cpp
index 889cf8b..e24854d 100644
--- a/libcxx/test/libcxx/ranges/range.utility.helpers/has_arrow.compile.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.utility.helpers/has_arrow.compile.pass.cpp
@@ -11,6 +11,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
#include <ranges>
diff --git a/libcxx/test/libcxx/ranges/range.utility.helpers/simple_view.compile.pass.cpp b/libcxx/test/libcxx/ranges/range.utility.helpers/simple_view.compile.pass.cpp
index c544d92..f7a5df1 100644
--- a/libcxx/test/libcxx/ranges/range.utility.helpers/simple_view.compile.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.utility.helpers/simple_view.compile.pass.cpp
@@ -11,6 +11,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
#include <ranges>
diff --git a/libcxx/test/libcxx/ranges/version.compile.pass.cpp b/libcxx/test/libcxx/ranges/version.compile.pass.cpp
index 817b9ee..16a2b58 100644
--- a/libcxx/test/libcxx/ranges/version.compile.pass.cpp
+++ b/libcxx/test/libcxx/ranges/version.compile.pass.cpp
@@ -6,6 +6,8 @@
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
+
// <ranges>
#include <ranges>
diff --git a/libcxx/test/libcxx/utilities/format/version.compile.pass.cpp b/libcxx/test/libcxx/utilities/format/version.compile.pass.cpp
index e61f58f..4c1be77 100644
--- a/libcxx/test/libcxx/utilities/format/version.compile.pass.cpp
+++ b/libcxx/test/libcxx/utilities/format/version.compile.pass.cpp
@@ -6,6 +6,8 @@
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-incomplete-format
+
// <format>
#include <format>
diff --git a/libcxx/test/std/containers/associative/map/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/associative/map/range_concept_conformance.compile.pass.cpp
index b098f05..9d80747 100644
--- a/libcxx/test/std/containers/associative/map/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// map
diff --git a/libcxx/test/std/containers/associative/multimap/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/associative/multimap/range_concept_conformance.compile.pass.cpp
index 9362e25..07fc67c 100644
--- a/libcxx/test/std/containers/associative/multimap/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/containers/associative/multimap/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// multimap
diff --git a/libcxx/test/std/containers/associative/multiset/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/associative/multiset/range_concept_conformance.compile.pass.cpp
index 417e19d..bf97de8 100644
--- a/libcxx/test/std/containers/associative/multiset/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/containers/associative/multiset/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// multiset
diff --git a/libcxx/test/std/containers/associative/set/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/associative/set/range_concept_conformance.compile.pass.cpp
index caf6ba2..f7c0772 100644
--- a/libcxx/test/std/containers/associative/set/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/containers/associative/set/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// set
diff --git a/libcxx/test/std/containers/sequences/array/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/sequences/array/range_concept_conformance.compile.pass.cpp
index cfe01e7..dd4000c8 100644
--- a/libcxx/test/std/containers/sequences/array/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/containers/sequences/array/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// array
diff --git a/libcxx/test/std/containers/sequences/deque/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/sequences/deque/range_concept_conformance.compile.pass.cpp
index df9f6e8..866ac4c 100644
--- a/libcxx/test/std/containers/sequences/deque/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/containers/sequences/deque/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// deque
diff --git a/libcxx/test/std/containers/sequences/forwardlist/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/range_concept_conformance.compile.pass.cpp
index 142dc96..4afbb28 100644
--- a/libcxx/test/std/containers/sequences/forwardlist/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/containers/sequences/forwardlist/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// forward_list
diff --git a/libcxx/test/std/containers/sequences/list/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/sequences/list/range_concept_conformance.compile.pass.cpp
index 75c6d34..4183f6a 100644
--- a/libcxx/test/std/containers/sequences/list/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/containers/sequences/list/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// list
diff --git a/libcxx/test/std/containers/sequences/vector.bool/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/sequences/vector.bool/range_concept_conformance.compile.pass.cpp
index fb028d0..b9b3a27 100644
--- a/libcxx/test/std/containers/sequences/vector.bool/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/containers/sequences/vector.bool/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// vector
diff --git a/libcxx/test/std/containers/sequences/vector/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/sequences/vector/range_concept_conformance.compile.pass.cpp
index c47413e..37b751f 100644
--- a/libcxx/test/std/containers/sequences/vector/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/containers/sequences/vector/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// vector
diff --git a/libcxx/test/std/containers/unord/unord.map/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/unord/unord.map/range_concept_conformance.compile.pass.cpp
index 71a7221..60fea7f 100644
--- a/libcxx/test/std/containers/unord/unord.map/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// unordered_map
diff --git a/libcxx/test/std/containers/unord/unord.multimap/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/range_concept_conformance.compile.pass.cpp
index e186272..695ee32 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// unordered_multimap
diff --git a/libcxx/test/std/containers/unord/unord.multiset/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/range_concept_conformance.compile.pass.cpp
index 29789d0..560dbae 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// unordered_multiset
diff --git a/libcxx/test/std/containers/unord/unord.set/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/unord/unord.set/range_concept_conformance.compile.pass.cpp
index bd48bba..8d41a55 100644
--- a/libcxx/test/std/containers/unord/unord.set/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// unordered_multiset
diff --git a/libcxx/test/std/containers/views/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/views/range_concept_conformance.compile.pass.cpp
index c850c50..f4106e7 100644
--- a/libcxx/test/std/containers/views/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/containers/views/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// span
diff --git a/libcxx/test/std/input.output/filesystems/class.directory_iterator/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/input.output/filesystems/class.directory_iterator/range_concept_conformance.compile.pass.cpp
index ff79c8b..27e5057 100644
--- a/libcxx/test/std/input.output/filesystems/class.directory_iterator/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/input.output/filesystems/class.directory_iterator/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// XFAIL: *
// directory_iterator, recursive_directory_iterator
diff --git a/libcxx/test/std/input.output/filesystems/class.path/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/input.output/filesystems/class.path/range_concept_conformance.compile.pass.cpp
index b9b70d0..326073f 100644
--- a/libcxx/test/std/input.output/filesystems/class.path/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/input.output/filesystems/class.path/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// path
diff --git a/libcxx/test/std/iterators/predef.iterators/iterators.common/assign.pass.cpp b/libcxx/test/std/iterators/predef.iterators/iterators.common/assign.pass.cpp
index baa759f7..98bf6c0 100644
--- a/libcxx/test/std/iterators/predef.iterators/iterators.common/assign.pass.cpp
+++ b/libcxx/test/std/iterators/predef.iterators/iterators.common/assign.pass.cpp
@@ -16,7 +16,9 @@
// common_iterator& operator=(const common_iterator<I2, S2>& x);
#include <iterator>
+#ifndef _LIBCPP_HAS_NO_INCOMPLETE_RANGES
#include <ranges>
+#endif
#include <cassert>
#include "test_macros.h"
@@ -55,6 +57,7 @@ void test() {
assert(*commonIter2 == 2);
assert(commonIter1 == commonIter2);
}
+#ifndef _LIBCPP_HAS_NO_INCOMPLETE_RANGES
{
auto iter1 = random_access_iterator<int*>(buffer);
auto commonIter1 = std::common_iterator<decltype(iter1), sentinel_type<int*>>(iter1);
@@ -81,6 +84,7 @@ void test() {
assert(std::ranges::next(commonIter1, 6) == commonSent1);
assert(std::ranges::next(commonIter1, 6) == commonSent2);
}
+#endif
{
auto iter1 = assignable_iterator<int*>(buffer);
auto iter2 = forward_iterator<int*>(buffer + 1);
@@ -99,13 +103,17 @@ void test() {
assert(*commonIter2 == 2);
assert(commonIter1 == commonIter2);
+#ifndef _LIBCPP_HAS_NO_INCOMPLETE_RANGES
assert(std::ranges::next(commonIter1, 6) != commonSent1);
assert(std::ranges::next(commonIter1, 6) == commonSent2);
+#endif
commonSent1 = commonSent2;
+#ifndef _LIBCPP_HAS_NO_INCOMPLETE_RANGES
assert(std::ranges::next(commonIter1, 6) == commonSent1);
assert(std::ranges::next(commonIter1, 6) == commonSent2);
+#endif
commonIter1 = commonSent1;
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/format.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/format.version.pass.cpp
index 21707a5..67fc1af 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/format.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/format.version.pass.cpp
@@ -11,6 +11,8 @@
//
// clang-format off
+// UNSUPPORTED: libcpp-has-no-incomplete-format
+
// <format>
// Test the feature test macros defined by <format>
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/ranges.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/ranges.version.pass.cpp
index 96496ad..b1da06f 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/ranges.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/ranges.version.pass.cpp
@@ -11,6 +11,8 @@
//
// clang-format off
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
+
// <ranges>
// Test the feature test macros defined by <ranges>
diff --git a/libcxx/test/std/ranges/range.access/range.access.begin/begin.pass.cpp b/libcxx/test/std/ranges/range.access/range.access.begin/begin.pass.cpp
index 1e83cda..48c035e 100644
--- a/libcxx/test/std/ranges/range.access/range.access.begin/begin.pass.cpp
+++ b/libcxx/test/std/ranges/range.access/range.access.begin/begin.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// std::ranges::begin
diff --git a/libcxx/test/std/ranges/range.access/range.access.begin/incomplete.compile.verify.cpp b/libcxx/test/std/ranges/range.access/range.access.begin/incomplete.compile.verify.cpp
index b145930..a40b901 100644
--- a/libcxx/test/std/ranges/range.access/range.access.begin/incomplete.compile.verify.cpp
+++ b/libcxx/test/std/ranges/range.access/range.access.begin/incomplete.compile.verify.cpp
@@ -10,6 +10,7 @@
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
// UNSUPPORTED: clang-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// unspecified begin;
diff --git a/libcxx/test/std/ranges/range.access/range.access.cbegin/incomplete.compile.verify.cpp b/libcxx/test/std/ranges/range.access/range.access.cbegin/incomplete.compile.verify.cpp
index 1fecf67..689d3d1 100644
--- a/libcxx/test/std/ranges/range.access/range.access.cbegin/incomplete.compile.verify.cpp
+++ b/libcxx/test/std/ranges/range.access/range.access.cbegin/incomplete.compile.verify.cpp
@@ -10,6 +10,7 @@
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
// UNSUPPORTED: clang-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// ranges::cbegin;
diff --git a/libcxx/test/std/ranges/range.access/range.access.cend/incomplete.compile.verify.cpp b/libcxx/test/std/ranges/range.access/range.access.cend/incomplete.compile.verify.cpp
index 10b4517..5f18cb8 100644
--- a/libcxx/test/std/ranges/range.access/range.access.cend/incomplete.compile.verify.cpp
+++ b/libcxx/test/std/ranges/range.access/range.access.cend/incomplete.compile.verify.cpp
@@ -10,6 +10,7 @@
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
// UNSUPPORTED: clang-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// unspecified begin;
diff --git a/libcxx/test/std/ranges/range.access/range.access.end/end.pass.cpp b/libcxx/test/std/ranges/range.access/range.access.end/end.pass.cpp
index 1a5d7fb..d571463 100644
--- a/libcxx/test/std/ranges/range.access/range.access.end/end.pass.cpp
+++ b/libcxx/test/std/ranges/range.access/range.access.end/end.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// std::ranges::end
diff --git a/libcxx/test/std/ranges/range.access/range.access.end/incomplete.compile.verify.cpp b/libcxx/test/std/ranges/range.access/range.access.end/incomplete.compile.verify.cpp
index 93c4c66..8b6c3e8 100644
--- a/libcxx/test/std/ranges/range.access/range.access.end/incomplete.compile.verify.cpp
+++ b/libcxx/test/std/ranges/range.access/range.access.end/incomplete.compile.verify.cpp
@@ -10,6 +10,7 @@
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
// UNSUPPORTED: clang-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// unspecified begin;
diff --git a/libcxx/test/std/ranges/range.access/range.prim/data.incomplete.verify.cpp b/libcxx/test/std/ranges/range.access/range.prim/data.incomplete.verify.cpp
index f564750..a8d979c 100644
--- a/libcxx/test/std/ranges/range.access/range.prim/data.incomplete.verify.cpp
+++ b/libcxx/test/std/ranges/range.access/range.prim/data.incomplete.verify.cpp
@@ -10,6 +10,7 @@
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: clang-10
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// std::ranges::data
diff --git a/libcxx/test/std/ranges/range.access/range.prim/data.pass.cpp b/libcxx/test/std/ranges/range.access/range.prim/data.pass.cpp
index 567412a..9e28c21 100644
--- a/libcxx/test/std/ranges/range.access/range.prim/data.pass.cpp
+++ b/libcxx/test/std/ranges/range.access/range.prim/data.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// std::ranges::data
diff --git a/libcxx/test/std/ranges/range.access/range.prim/empty.incomplete.verify.cpp b/libcxx/test/std/ranges/range.access/range.prim/empty.incomplete.verify.cpp
index 0fcbad8..a2c354d 100644
--- a/libcxx/test/std/ranges/range.access/range.prim/empty.incomplete.verify.cpp
+++ b/libcxx/test/std/ranges/range.access/range.prim/empty.incomplete.verify.cpp
@@ -10,6 +10,7 @@
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: clang-10
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// std::ranges::empty
diff --git a/libcxx/test/std/ranges/range.access/range.prim/empty.pass.cpp b/libcxx/test/std/ranges/range.access/range.prim/empty.pass.cpp
index fc95c9c9..2607689 100644
--- a/libcxx/test/std/ranges/range.access/range.prim/empty.pass.cpp
+++ b/libcxx/test/std/ranges/range.access/range.prim/empty.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// std::ranges::empty
diff --git a/libcxx/test/std/ranges/range.access/range.prim/size.pass.cpp b/libcxx/test/std/ranges/range.access/range.prim/size.pass.cpp
index 301a67c..05f79b2 100644
--- a/libcxx/test/std/ranges/range.access/range.prim/size.pass.cpp
+++ b/libcxx/test/std/ranges/range.access/range.prim/size.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// std::ranges::size
diff --git a/libcxx/test/std/ranges/range.access/range.prim/ssize.pass.cpp b/libcxx/test/std/ranges/range.access/range.prim/ssize.pass.cpp
index 8b8878a..a995d56 100644
--- a/libcxx/test/std/ranges/range.access/range.prim/ssize.pass.cpp
+++ b/libcxx/test/std/ranges/range.access/range.prim/ssize.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// std::ranges::ssize
diff --git a/libcxx/test/std/ranges/range.adaptors/range.all/all.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.all/all.pass.cpp
index c4adfb3..806dbdb 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.all/all.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.all/all.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// std::views::all;
diff --git a/libcxx/test/std/ranges/range.adaptors/range.all/all_t.compile.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.all/all_t.compile.pass.cpp
index 5aaf03c..06dca18 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.all/all_t.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.all/all_t.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<viewable_range R>
// using all_t = decltype(views::all(declval<R>()));
diff --git a/libcxx/test/std/ranges/range.adaptors/range.common.view/base.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.common.view/base.pass.cpp
index 0f3df9e..72e23e4 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.common.view/base.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.common.view/base.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// constexpr V base() const& requires copy_constructible<V>;
// constexpr V base() &&;
diff --git a/libcxx/test/std/ranges/range.adaptors/range.common.view/begin.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.common.view/begin.pass.cpp
index 9edd8eb..bdcde06f 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.common.view/begin.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.common.view/begin.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// constexpr auto begin();
// constexpr auto begin() const requires range<const V>;
diff --git a/libcxx/test/std/ranges/range.adaptors/range.common.view/borrowing.compile.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.common.view/borrowing.compile.pass.cpp
index 47441e3..66b431d 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.common.view/borrowing.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.common.view/borrowing.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class T>
// inline constexpr bool enable_borrowed_range<common_view<T>> = enable_borrowed_range<T>;
diff --git a/libcxx/test/std/ranges/range.adaptors/range.common.view/ctad.compile.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.common.view/ctad.compile.pass.cpp
index cde41fd..856212a 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.common.view/ctad.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.common.view/ctad.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class R>
// common_view(R&&) -> common_view<views::all_t<R>>;
diff --git a/libcxx/test/std/ranges/range.adaptors/range.common.view/ctor.default.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.common.view/ctor.default.pass.cpp
index 2b76a271f..72638a8 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.common.view/ctor.default.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.common.view/ctor.default.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// common_view() requires default_initializable<V> = default;
diff --git a/libcxx/test/std/ranges/range.adaptors/range.common.view/ctor.view.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.common.view/ctor.view.pass.cpp
index e7dab19..4fa9dea 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.common.view/ctor.view.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.common.view/ctor.view.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// constexpr explicit common_view(V r);
diff --git a/libcxx/test/std/ranges/range.adaptors/range.common.view/end.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.common.view/end.pass.cpp
index 9583373..0f103ca 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.common.view/end.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.common.view/end.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// constexpr auto end();
// constexpr auto end() const requires range<const V>;
diff --git a/libcxx/test/std/ranges/range.adaptors/range.common.view/size.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.common.view/size.pass.cpp
index 464b9ea..efbaf52 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.common.view/size.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.common.view/size.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// constexpr auto size() requires sized_range<V>
// constexpr auto size() const requires sized_range<const V>
diff --git a/libcxx/test/std/ranges/range.adaptors/range.drop/base.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.drop/base.pass.cpp
index f485d17..0173c40 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.drop/base.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.drop/base.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// constexpr V base() const& requires copy_constructible<V> { return base_; }
// constexpr V base() && { return std::move(base_); }
diff --git a/libcxx/test/std/ranges/range.adaptors/range.drop/begin.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.drop/begin.pass.cpp
index b19143e..ce3ae0e 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.drop/begin.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.drop/begin.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// constexpr auto begin()
// requires (!(simple-view<V> &&
diff --git a/libcxx/test/std/ranges/range.adaptors/range.drop/ctad.compile.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.drop/ctad.compile.pass.cpp
index c22417b..03fa74c 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.drop/ctad.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.drop/ctad.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class R>
// drop_view(R&&, range_difference_t<R>) -> drop_view<views::all_t<R>>;
diff --git a/libcxx/test/std/ranges/range.adaptors/range.drop/ctor.default.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.drop/ctor.default.pass.cpp
index 1e41825..11593ec 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.drop/ctor.default.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.drop/ctor.default.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// drop_view() requires default_initializable<V> = default;
diff --git a/libcxx/test/std/ranges/range.adaptors/range.drop/ctor.view.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.drop/ctor.view.pass.cpp
index 05cd1b1..f866090 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.drop/ctor.view.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.drop/ctor.view.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// constexpr drop_view(V base, range_difference_t<V> count);
diff --git a/libcxx/test/std/ranges/range.adaptors/range.drop/dangling.cache.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.drop/dangling.cache.pass.cpp
index 99e7d61..bde74ad 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.drop/dangling.cache.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.drop/dangling.cache.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// If we have a copy-propagating cache, when we copy ZeroOnDestroy, we will get a
// dangling reference to the copied-from object. This test ensures that we do not
diff --git a/libcxx/test/std/ranges/range.adaptors/range.drop/end.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.drop/end.pass.cpp
index b0e5c54..28acbb6 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.drop/end.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.drop/end.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// constexpr auto end()
// requires (!simple-view<V>)
diff --git a/libcxx/test/std/ranges/range.adaptors/range.drop/general.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.drop/general.pass.cpp
index 087e11e..b0db1c5 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.drop/general.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.drop/general.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// Some basic examples of how drop_view might be used in the wild. This is a general
// collection of sample algorithms and functions that try to mock general usage of
diff --git a/libcxx/test/std/ranges/range.adaptors/range.drop/size.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.drop/size.pass.cpp
index 297768a..48c6d4c 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.drop/size.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.drop/size.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// constexpr auto size()
// requires sized_range<V>
diff --git a/libcxx/test/std/ranges/range.adaptors/range.empty/empty_view.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.empty/empty_view.pass.cpp
index 6ee337f..5c43d04 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.empty/empty_view.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.empty/empty_view.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class T>
// class empty_view;
diff --git a/libcxx/test/std/ranges/range.adaptors/range.ref.view.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.ref.view.pass.cpp
index 9278bd0..4ceb996 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.ref.view.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.ref.view.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<range R>
// requires is_object_v<R>
diff --git a/libcxx/test/std/ranges/range.adaptors/range.transform/base.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.transform/base.pass.cpp
index 76ebc97..b3426c2 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.transform/base.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.transform/base.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// constexpr V base() const& requires copy_constructible<V>
// constexpr V base() &&
diff --git a/libcxx/test/std/ranges/range.adaptors/range.transform/begin.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.transform/begin.pass.cpp
index 4c37dac..837bdce 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.transform/begin.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.transform/begin.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// constexpr iterator<false> begin();
// constexpr iterator<true> begin() const
diff --git a/libcxx/test/std/ranges/range.adaptors/range.transform/ctad.compile.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.transform/ctad.compile.pass.cpp
index 0d123a8..d19eeb5 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.transform/ctad.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.transform/ctad.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// CTAD tests.
diff --git a/libcxx/test/std/ranges/range.adaptors/range.transform/end.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.transform/end.pass.cpp
index e009b01..b216a02 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.transform/end.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.transform/end.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// constexpr sentinel<false> end();
// constexpr iterator<false> end() requires common_range<V>;
diff --git a/libcxx/test/std/ranges/range.adaptors/range.transform/general.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.transform/general.pass.cpp
index 9c8403c..8daf15e 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.transform/general.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.transform/general.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// Some basic examples of how transform_view might be used in the wild. This is a general
// collection of sample algorithms and functions that try to mock general usage of
diff --git a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/arithmetic.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/arithmetic.pass.cpp
index eee9529..4ac17aa 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/arithmetic.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/arithmetic.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// transform_view::<iterator>::operator{++,--,+=,-=}
diff --git a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/base.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/base.pass.cpp
index a9a705f..b644816 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/base.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/base.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// transform_view::<iterator>::base
diff --git a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/compare.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/compare.pass.cpp
index eaa7ee5..71e75b6 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/compare.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/compare.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// transform_view::<iterator>::operator{<,>,<=,>=}
diff --git a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/ctor.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/ctor.pass.cpp
index 47db757..e16d7cf 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/ctor.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/ctor.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// transform_view::<iterator>::transform_view::<iterator>();
diff --git a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/deref.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/deref.pass.cpp
index 345e6d0..f1d0396 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/deref.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/deref.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// transform_view::<iterator>::operator*
diff --git a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/iter_move.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/iter_move.pass.cpp
index c417dc8..cb3893d 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/iter_move.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/iter_move.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// transform_view::<iterator>::operator[]
diff --git a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/plus_minus.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/plus_minus.pass.cpp
index 5def935..878aadf 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/plus_minus.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/plus_minus.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// transform_view::<iterator>::operator{+,-}
diff --git a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/requirements.compile.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/requirements.compile.pass.cpp
index e29a316..bb5fb97 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/requirements.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/requirements.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// The requirements for transform_view::<iterator>'s members.
diff --git a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/sentinel.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/sentinel.pass.cpp
index fe072dd..f8ff9ec 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/sentinel.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/sentinel.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// class transform_view::<sentinel>;
diff --git a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/subscript.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/subscript.pass.cpp
index 01b77c1..bcabb71 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/subscript.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/subscript.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// transform_view::<iterator>::operator[]
diff --git a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/types.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/types.pass.cpp
index 7556366..1de567f 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/types.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.transform/iterator/types.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// transform_view::<iterator>::difference_type
// transform_view::<iterator>::value_type
diff --git a/libcxx/test/std/ranges/range.adaptors/range.transform/size.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.transform/size.pass.cpp
index 6960d9b..95d9093 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.transform/size.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.transform/size.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// constexpr auto size() requires sized_range<V>
// constexpr auto size() const requires sized_range<const V>
diff --git a/libcxx/test/std/ranges/range.range/borrowed_range.compile.pass.cpp b/libcxx/test/std/ranges/range.range/borrowed_range.compile.pass.cpp
index d645efe..9311283 100644
--- a/libcxx/test/std/ranges/range.range/borrowed_range.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.range/borrowed_range.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class T>
// concept borrowed_range;
diff --git a/libcxx/test/std/ranges/range.range/borrowed_range.subsumption.compile.pass.cpp b/libcxx/test/std/ranges/range.range/borrowed_range.subsumption.compile.pass.cpp
index 163cef4..2df6d7e 100644
--- a/libcxx/test/std/ranges/range.range/borrowed_range.subsumption.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.range/borrowed_range.subsumption.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class T>
// concept borrowed_range;
diff --git a/libcxx/test/std/ranges/range.req/range.range/enable_borrowed_range.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.range/enable_borrowed_range.compile.pass.cpp
index 46755e3..b226743 100644
--- a/libcxx/test/std/ranges/range.req/range.range/enable_borrowed_range.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.range/enable_borrowed_range.compile.pass.cpp
@@ -8,6 +8,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// <ranges>
diff --git a/libcxx/test/std/ranges/range.req/range.range/helper_aliases.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.range/helper_aliases.compile.pass.cpp
index 4fd128a..7771431 100644
--- a/libcxx/test/std/ranges/range.req/range.range/helper_aliases.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.range/helper_aliases.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<range R>
// using range_difference_t = iter_difference_t<iterator_t<R>>;
diff --git a/libcxx/test/std/ranges/range.req/range.range/iterator_t.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.range/iterator_t.compile.pass.cpp
index 60a307b..ad598c1 100644
--- a/libcxx/test/std/ranges/range.req/range.range/iterator_t.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.range/iterator_t.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class T>
// using iterator_t = decltype(ranges::begin(declval<T&>()));
diff --git a/libcxx/test/std/ranges/range.req/range.range/range.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.range/range.compile.pass.cpp
index 82b35da..59b297f 100644
--- a/libcxx/test/std/ranges/range.req/range.range/range.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.range/range.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class T>
// concept range;
diff --git a/libcxx/test/std/ranges/range.req/range.range/range_size_t.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.range/range_size_t.compile.pass.cpp
index 5460f43..9e88690 100644
--- a/libcxx/test/std/ranges/range.req/range.range/range_size_t.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.range/range_size_t.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<sized_range R>
// using range_size_t = decltype(ranges::size(declval<R&>()));
diff --git a/libcxx/test/std/ranges/range.req/range.range/sentinel_t.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.range/sentinel_t.compile.pass.cpp
index 84b9f44..6cbdd0f 100644
--- a/libcxx/test/std/ranges/range.req/range.range/sentinel_t.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.range/sentinel_t.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<range _Rp>
// using sentinel_t = decltype(ranges::end(declval<_Rp&>()));
diff --git a/libcxx/test/std/ranges/range.req/range.refinements/bidirectional_range.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.refinements/bidirectional_range.compile.pass.cpp
index 6c6bb50..107d5de 100644
--- a/libcxx/test/std/ranges/range.req/range.refinements/bidirectional_range.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.refinements/bidirectional_range.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class R>
// concept bidirectional_range;
diff --git a/libcxx/test/std/ranges/range.req/range.refinements/common_range.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.refinements/common_range.compile.pass.cpp
index 59ce71e2..693ee81 100644
--- a/libcxx/test/std/ranges/range.req/range.refinements/common_range.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.refinements/common_range.compile.pass.cpp
@@ -8,6 +8,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class R>
// concept common_range;
diff --git a/libcxx/test/std/ranges/range.req/range.refinements/contiguous_range.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.refinements/contiguous_range.compile.pass.cpp
index d4f0247..611d625 100644
--- a/libcxx/test/std/ranges/range.req/range.refinements/contiguous_range.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.refinements/contiguous_range.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class R>
// concept contiguous_range;
diff --git a/libcxx/test/std/ranges/range.req/range.refinements/forward_range.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.refinements/forward_range.compile.pass.cpp
index d19531c..c30a64d 100644
--- a/libcxx/test/std/ranges/range.req/range.refinements/forward_range.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.refinements/forward_range.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class R>
// concept forward_range;
diff --git a/libcxx/test/std/ranges/range.req/range.refinements/input_range.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.refinements/input_range.compile.pass.cpp
index dc9b9bc..0aadc42 100644
--- a/libcxx/test/std/ranges/range.req/range.refinements/input_range.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.refinements/input_range.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class R>
// concept input_range;
diff --git a/libcxx/test/std/ranges/range.req/range.refinements/output_range.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.refinements/output_range.compile.pass.cpp
index d3c5808..c9818db 100644
--- a/libcxx/test/std/ranges/range.req/range.refinements/output_range.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.refinements/output_range.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class R, class T>
// concept output_range;
diff --git a/libcxx/test/std/ranges/range.req/range.refinements/random_access_range.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.refinements/random_access_range.compile.pass.cpp
index f73c750..1a2baac 100644
--- a/libcxx/test/std/ranges/range.req/range.refinements/random_access_range.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.refinements/random_access_range.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class R>
// concept random_access_range;
diff --git a/libcxx/test/std/ranges/range.req/range.refinements/subsumption.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.refinements/subsumption.compile.pass.cpp
index d2f3f39..c47e054 100644
--- a/libcxx/test/std/ranges/range.req/range.refinements/subsumption.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.refinements/subsumption.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class T>
// concept input_iterator;
diff --git a/libcxx/test/std/ranges/range.req/range.refinements/viewable_range.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.refinements/viewable_range.compile.pass.cpp
index 3cef347..4b7bf81 100644
--- a/libcxx/test/std/ranges/range.req/range.refinements/viewable_range.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.refinements/viewable_range.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class R>
// concept viewable_range;
diff --git a/libcxx/test/std/ranges/range.req/range.sized/sized_range.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.sized/sized_range.compile.pass.cpp
index ca03b8b..b5d30d6 100644
--- a/libcxx/test/std/ranges/range.req/range.sized/sized_range.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.sized/sized_range.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class T>
// concept sized_range;
diff --git a/libcxx/test/std/ranges/range.req/range.sized/subsumption.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.sized/subsumption.compile.pass.cpp
index 854429f..8d960c4 100644
--- a/libcxx/test/std/ranges/range.req/range.sized/subsumption.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.sized/subsumption.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class T>
// concept sized_range;
diff --git a/libcxx/test/std/ranges/range.req/range.view/enable_view.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.view/enable_view.compile.pass.cpp
index 2f7baab..19ea867 100644
--- a/libcxx/test/std/ranges/range.req/range.view/enable_view.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.view/enable_view.compile.pass.cpp
@@ -8,6 +8,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// <ranges>
diff --git a/libcxx/test/std/ranges/range.req/range.view/view.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.view/view.compile.pass.cpp
index 5184bb0..2d0c253 100644
--- a/libcxx/test/std/ranges/range.req/range.view/view.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.view/view.compile.pass.cpp
@@ -8,6 +8,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// <ranges>
diff --git a/libcxx/test/std/ranges/range.req/range.view/view.subsumption.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.view/view.subsumption.compile.pass.cpp
index c3df4de..63f150dc 100644
--- a/libcxx/test/std/ranges/range.req/range.view/view.subsumption.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.view/view.subsumption.compile.pass.cpp
@@ -8,6 +8,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// <ranges>
diff --git a/libcxx/test/std/ranges/range.req/range.view/view_base.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.view/view_base.compile.pass.cpp
index 94a996d..b4fee83 100644
--- a/libcxx/test/std/ranges/range.req/range.view/view_base.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.view/view_base.compile.pass.cpp
@@ -8,6 +8,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// <ranges>
diff --git a/libcxx/test/std/ranges/range.utility/range.dangling/borrowed_iterator.compile.pass.cpp b/libcxx/test/std/ranges/range.utility/range.dangling/borrowed_iterator.compile.pass.cpp
index bff34a7..54e6593 100644
--- a/libcxx/test/std/ranges/range.utility/range.dangling/borrowed_iterator.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.utility/range.dangling/borrowed_iterator.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// std::ranges::borrowed_iterator_t;
diff --git a/libcxx/test/std/ranges/range.utility/range.dangling/borrowed_subrange.compile.pass.cpp b/libcxx/test/std/ranges/range.utility/range.dangling/borrowed_subrange.compile.pass.cpp
index 7327145..13f25d6 100644
--- a/libcxx/test/std/ranges/range.utility/range.dangling/borrowed_subrange.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.utility/range.dangling/borrowed_subrange.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// std::ranges::borrowed_subrange_t;
diff --git a/libcxx/test/std/ranges/range.utility/range.dangling/dangling.pass.cpp b/libcxx/test/std/ranges/range.utility/range.dangling/dangling.pass.cpp
index b04d823..57626c3 100644
--- a/libcxx/test/std/ranges/range.utility/range.dangling/dangling.pass.cpp
+++ b/libcxx/test/std/ranges/range.utility/range.dangling/dangling.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// std::ranges::dangling;
diff --git a/libcxx/test/std/ranges/range.utility/range.subrange/access/advance.pass.cpp b/libcxx/test/std/ranges/range.utility/range.subrange/access/advance.pass.cpp
index 2d1cd7e..0154aaa 100644
--- a/libcxx/test/std/ranges/range.utility/range.subrange/access/advance.pass.cpp
+++ b/libcxx/test/std/ranges/range.utility/range.subrange/access/advance.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// class std::ranges::subrange;
diff --git a/libcxx/test/std/ranges/range.utility/range.subrange/access/get.pass.cpp b/libcxx/test/std/ranges/range.utility/range.subrange/access/get.pass.cpp
index 8c1a027..88f18df 100644
--- a/libcxx/test/std/ranges/range.utility/range.subrange/access/get.pass.cpp
+++ b/libcxx/test/std/ranges/range.utility/range.subrange/access/get.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// class std::ranges::subrange;
diff --git a/libcxx/test/std/ranges/range.utility/range.subrange/access/primitives.pass.cpp b/libcxx/test/std/ranges/range.utility/range.subrange/access/primitives.pass.cpp
index fe31471..cc2336f 100644
--- a/libcxx/test/std/ranges/range.utility/range.subrange/access/primitives.pass.cpp
+++ b/libcxx/test/std/ranges/range.utility/range.subrange/access/primitives.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// class std::ranges::subrange;
diff --git a/libcxx/test/std/ranges/range.utility/range.subrange/ctad.compile.pass.cpp b/libcxx/test/std/ranges/range.utility/range.subrange/ctad.compile.pass.cpp
index e34b519..2bd13f1 100644
--- a/libcxx/test/std/ranges/range.utility/range.subrange/ctad.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.utility/range.subrange/ctad.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// class std::ranges::subrange;
diff --git a/libcxx/test/std/ranges/range.utility/range.subrange/ctor/begin_end.pass.cpp b/libcxx/test/std/ranges/range.utility/range.subrange/ctor/begin_end.pass.cpp
index 5a6364f..4308e6a 100644
--- a/libcxx/test/std/ranges/range.utility/range.subrange/ctor/begin_end.pass.cpp
+++ b/libcxx/test/std/ranges/range.utility/range.subrange/ctor/begin_end.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// class std::ranges::subrange;
diff --git a/libcxx/test/std/ranges/range.utility/range.subrange/ctor/begin_end_size.pass.cpp b/libcxx/test/std/ranges/range.utility/range.subrange/ctor/begin_end_size.pass.cpp
index e8ae605..5a362ba 100644
--- a/libcxx/test/std/ranges/range.utility/range.subrange/ctor/begin_end_size.pass.cpp
+++ b/libcxx/test/std/ranges/range.utility/range.subrange/ctor/begin_end_size.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// class std::ranges::subrange;
diff --git a/libcxx/test/std/ranges/range.utility/range.subrange/ctor/pair_like_conv.pass.cpp b/libcxx/test/std/ranges/range.utility/range.subrange/ctor/pair_like_conv.pass.cpp
index 1b74983..d1b178d 100644
--- a/libcxx/test/std/ranges/range.utility/range.subrange/ctor/pair_like_conv.pass.cpp
+++ b/libcxx/test/std/ranges/range.utility/range.subrange/ctor/pair_like_conv.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// class std::ranges::subrange;
diff --git a/libcxx/test/std/ranges/range.utility/range.subrange/ctor/range.pass.cpp b/libcxx/test/std/ranges/range.utility/range.subrange/ctor/range.pass.cpp
index a6e0300..13746fe 100644
--- a/libcxx/test/std/ranges/range.utility/range.subrange/ctor/range.pass.cpp
+++ b/libcxx/test/std/ranges/range.utility/range.subrange/ctor/range.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// class std::ranges::subrange;
diff --git a/libcxx/test/std/ranges/range.utility/range.subrange/ctor/range_size.pass.cpp b/libcxx/test/std/ranges/range.utility/range.subrange/ctor/range_size.pass.cpp
index fe71fee..b3d5646 100644
--- a/libcxx/test/std/ranges/range.utility/range.subrange/ctor/range_size.pass.cpp
+++ b/libcxx/test/std/ranges/range.utility/range.subrange/ctor/range_size.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// class std::ranges::subrange;
diff --git a/libcxx/test/std/ranges/range.utility/range.subrange/enable_borrowed_range.compile.pass.cpp b/libcxx/test/std/ranges/range.utility/range.subrange/enable_borrowed_range.compile.pass.cpp
index 1c7f6e4..5bcd656 100644
--- a/libcxx/test/std/ranges/range.utility/range.subrange/enable_borrowed_range.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.utility/range.subrange/enable_borrowed_range.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// class std::ranges::subrange;
diff --git a/libcxx/test/std/ranges/range.utility/range.subrange/general.compile.pass.cpp b/libcxx/test/std/ranges/range.utility/range.subrange/general.compile.pass.cpp
index a7a944bc..50419ef 100644
--- a/libcxx/test/std/ranges/range.utility/range.subrange/general.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.utility/range.subrange/general.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// class std::ranges::subrange;
diff --git a/libcxx/test/std/ranges/range.utility/view.interface/view.interface.pass.cpp b/libcxx/test/std/ranges/range.utility/view.interface/view.interface.pass.cpp
index 61cffe1..713c362 100644
--- a/libcxx/test/std/ranges/range.utility/view.interface/view.interface.pass.cpp
+++ b/libcxx/test/std/ranges/range.utility/view.interface/view.interface.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// template<class D>
// requires is_class_v<D> && same_as<D, remove_cv_t<D>>
diff --git a/libcxx/test/std/re/re.results/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/re/re.results/range_concept_conformance.compile.pass.cpp
index 741b1ad..b2b0736 100644
--- a/libcxx/test/std/re/re.results/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/re/re.results/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// match_results
diff --git a/libcxx/test/std/strings/basic.string/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/strings/basic.string/range_concept_conformance.compile.pass.cpp
index fb1e676..b195964 100644
--- a/libcxx/test/std/strings/basic.string/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// string
diff --git a/libcxx/test/std/strings/string.view/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/strings/string.view/range_concept_conformance.compile.pass.cpp
index 860de80..e120001 100644
--- a/libcxx/test/std/strings/string.view/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/strings/string.view/range_concept_conformance.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: gcc-10
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// string_view
diff --git a/libcxx/test/std/utilities/format/format.error/format.error.pass.cpp b/libcxx/test/std/utilities/format/format.error/format.error.pass.cpp
index 979a3fe..e3d3c48 100644
--- a/libcxx/test/std/utilities/format/format.error/format.error.pass.cpp
+++ b/libcxx/test/std/utilities/format/format.error/format.error.pass.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
// UNSUPPORTED: c++03, c++11, c++14, c++17
+// UNSUPPORTED: libcpp-has-no-incomplete-format
// This test requires the dylib support introduced in D92214.
// XFAIL: use_system_cxx_lib && target={{.+}}-apple-macosx10.{{9|10|11|12|13|14|15}}
diff --git a/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/advance_to.pass.cpp b/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/advance_to.pass.cpp
index a4e219f..fe0405f 100644
--- a/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/advance_to.pass.cpp
+++ b/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/advance_to.pass.cpp
@@ -7,6 +7,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
+// UNSUPPORTED: libcpp-has-no-incomplete-format
// <format>
diff --git a/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/begin.pass.cpp b/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/begin.pass.cpp
index bcc11c6..b15f1ef 100644
--- a/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/begin.pass.cpp
+++ b/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/begin.pass.cpp
@@ -7,6 +7,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
+// UNSUPPORTED: libcpp-has-no-incomplete-format
// <format>
diff --git a/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/check_arg_id.pass.cpp b/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/check_arg_id.pass.cpp
index 7af82c3..910059b 100644
--- a/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/check_arg_id.pass.cpp
+++ b/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/check_arg_id.pass.cpp
@@ -8,6 +8,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: no-exceptions
+// UNSUPPORTED: libcpp-has-no-incomplete-format
// This test requires the dylib support introduced in D92214.
// XFAIL: use_system_cxx_lib && target={{.+}}-apple-macosx10.{{9|10|11|12|13|14|15}}
diff --git a/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/ctor.pass.cpp b/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/ctor.pass.cpp
index 1644ff6..ac6e8ca 100644
--- a/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/ctor.pass.cpp
+++ b/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/ctor.pass.cpp
@@ -7,6 +7,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
+// UNSUPPORTED: libcpp-has-no-incomplete-format
// <format>
diff --git a/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/end.pass.cpp b/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/end.pass.cpp
index 4026079..70e9de1 100644
--- a/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/end.pass.cpp
+++ b/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/end.pass.cpp
@@ -7,6 +7,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
+// UNSUPPORTED: libcpp-has-no-incomplete-format
// <format>
diff --git a/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/next_arg_id.pass.cpp b/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/next_arg_id.pass.cpp
index c5f05d9..72f2b02 100644
--- a/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/next_arg_id.pass.cpp
+++ b/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/next_arg_id.pass.cpp
@@ -8,6 +8,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
// UNSUPPORTED: no-exceptions
+// UNSUPPORTED: libcpp-has-no-incomplete-format
// This test requires the dylib support introduced in D92214.
// XFAIL: use_system_cxx_lib && target={{.+}}-apple-macosx10.{{9|10|11|12|13|14|15}}
diff --git a/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/types.compile.pass.cpp b/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/types.compile.pass.cpp
index b632f75..7e1a6b6 100644
--- a/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/types.compile.pass.cpp
+++ b/libcxx/test/std/utilities/format/format.formatter/format.parse.ctx/types.compile.pass.cpp
@@ -7,6 +7,7 @@
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-no-concepts
+// UNSUPPORTED: libcpp-has-no-incomplete-format
// <format>
diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py
index 78b124e..9fb740f 100755
--- a/libcxx/utils/generate_feature_test_macro_components.py
+++ b/libcxx/utils/generate_feature_test_macro_components.py
@@ -684,11 +684,13 @@ lit_markup = {
"atomic": ["UNSUPPORTED: libcpp-has-no-threads"],
"barrier": ["UNSUPPORTED: libcpp-has-no-threads"],
"filesystem": ["UNSUPPORTED: libcpp-has-no-filesystem-library"],
+ "format": ["UNSUPPORTED: libcpp-has-no-incomplete-format"],
"iomanip": ["UNSUPPORTED: libcpp-has-no-localization"],
"istream": ["UNSUPPORTED: libcpp-has-no-localization"],
"latch": ["UNSUPPORTED: libcpp-has-no-threads"],
"locale": ["UNSUPPORTED: libcpp-has-no-localization"],
"ostream": ["UNSUPPORTED: libcpp-has-no-localization"],
+ "ranges": ["UNSUPPORTED: libcpp-has-no-incomplete-ranges"],
"regex": ["UNSUPPORTED: libcpp-has-no-localization"],
"semaphore": ["UNSUPPORTED: libcpp-has-no-threads"],
"shared_mutex": ["UNSUPPORTED: libcpp-has-no-threads"],
diff --git a/libcxx/utils/generate_header_inclusion_tests.py b/libcxx/utils/generate_header_inclusion_tests.py
index 89cd67d..7b5a2db 100755
--- a/libcxx/utils/generate_header_inclusion_tests.py
+++ b/libcxx/utils/generate_header_inclusion_tests.py
@@ -93,6 +93,7 @@ lit_markup = {
"atomic": ["UNSUPPORTED: libcpp-has-no-threads"],
"barrier": ["UNSUPPORTED: libcpp-has-no-threads"],
"filesystem": ["UNSUPPORTED: libcpp-has-no-filesystem-library"],
+ "format": ["UNSUPPORTED: libcpp-has-no-incomplete-format"],
"iomanip": ["UNSUPPORTED: libcpp-has-no-localization"],
"ios": ["UNSUPPORTED: libcpp-has-no-localization"],
"iostream": ["UNSUPPORTED: libcpp-has-no-localization"],
@@ -100,6 +101,7 @@ lit_markup = {
"latch": ["UNSUPPORTED: libcpp-has-no-threads"],
"locale": ["UNSUPPORTED: libcpp-has-no-localization"],
"ostream": ["UNSUPPORTED: libcpp-has-no-localization"],
+ "ranges": ["UNSUPPORTED: libcpp-has-no-incomplete-ranges"],
"regex": ["UNSUPPORTED: libcpp-has-no-localization"],
"semaphore": ["UNSUPPORTED: libcpp-has-no-threads"],
"shared_mutex": ["UNSUPPORTED: libcpp-has-no-threads"],
diff --git a/libcxx/utils/generate_header_tests.py b/libcxx/utils/generate_header_tests.py
index 5236350..e081914 100755
--- a/libcxx/utils/generate_header_tests.py
+++ b/libcxx/utils/generate_header_tests.py
@@ -32,6 +32,7 @@ header_markup = {
"experimental/filesystem": ["ifndef _LIBCPP_HAS_NO_FILESYSTEM_LIBRARY"],
"filesystem": ["ifndef _LIBCPP_HAS_NO_FILESYSTEM_LIBRARY"],
+ "format": ["ifndef _LIBCPP_HAS_NO_INCOMPLETE_FORMAT"],
"clocale": ["ifndef _LIBCPP_HAS_NO_LOCALIZATION"],
"codecvt": ["ifndef _LIBCPP_HAS_NO_LOCALIZATION"],
@@ -43,6 +44,7 @@ header_markup = {
"locale.h": ["ifndef _LIBCPP_HAS_NO_LOCALIZATION"],
"locale": ["ifndef _LIBCPP_HAS_NO_LOCALIZATION"],
"ostream": ["ifndef _LIBCPP_HAS_NO_LOCALIZATION"],
+ "ranges": ["ifndef _LIBCPP_HAS_NO_INCOMPLETE_RANGES"],
"regex": ["ifndef _LIBCPP_HAS_NO_LOCALIZATION"],
"sstream": ["ifndef _LIBCPP_HAS_NO_LOCALIZATION"],
"streambuf": ["ifndef _LIBCPP_HAS_NO_LOCALIZATION"],
diff --git a/libcxx/utils/libcxx/test/features.py b/libcxx/utils/libcxx/test/features.py
index d9b092c..09afe20 100644
--- a/libcxx/utils/libcxx/test/features.py
+++ b/libcxx/utils/libcxx/test/features.py
@@ -104,6 +104,8 @@ macros = {
'_LIBCPP_HAS_NO_FILESYSTEM_LIBRARY': 'libcpp-has-no-filesystem-library',
'_LIBCPP_HAS_NO_RANDOM_DEVICE': 'libcpp-has-no-random-device',
'_LIBCPP_HAS_NO_LOCALIZATION': 'libcpp-has-no-localization',
+ '_LIBCPP_HAS_NO_INCOMPLETE_FORMAT': 'libcpp-has-no-incomplete-format',
+ '_LIBCPP_HAS_NO_INCOMPLETE_RANGES': 'libcpp-has-no-incomplete-ranges',
}
for macro, feature in macros.items():
DEFAULT_FEATURES += [