diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt --- a/libcxx/CMakeLists.txt +++ b/libcxx/CMakeLists.txt @@ -115,6 +115,12 @@ a source of randomness, such as some embedded platforms. When this is not supported, most of will still be available, but std::random_device will not." ON) +option(LIBCXX_ENABLE_LOCALIZATION + "Whether to include support for localization in the library. Disabling + localization can be useful when porting to platforms that don't support + the C locale API (e.g. embedded). When localization is not supported, + several parts of the library will be disabled: , , + will be completely unusable, and other parts may be only partly available." ON) option(LIBCXX_TEST_GDB_PRETTY_PRINTERS "Test gdb pretty printers." OFF) 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.") @@ -843,6 +849,7 @@ config_define_if(LIBCXX_NO_VCRUNTIME _LIBCPP_NO_VCRUNTIME) config_define_if(LIBCXX_ENABLE_PARALLEL_ALGORITHMS _LIBCPP_HAS_PARALLEL_ALGORITHMS) config_define_if_not(LIBCXX_ENABLE_RANDOM_DEVICE _LIBCPP_HAS_NO_RANDOM_DEVICE) +config_define_if_not(LIBCXX_ENABLE_LOCALIZATION _LIBCPP_HAS_NO_LOCALIZATION) if (LIBCXX_ABI_DEFINES) set(abi_defines) diff --git a/libcxx/cmake/caches/Generic-no-localization.cmake b/libcxx/cmake/caches/Generic-no-localization.cmake new file mode 100644 --- /dev/null +++ b/libcxx/cmake/caches/Generic-no-localization.cmake @@ -0,0 +1 @@ +set(LIBCXX_ENABLE_LOCALIZATION OFF CACHE BOOL "") diff --git a/libcxx/include/__config_site.in b/libcxx/include/__config_site.in --- a/libcxx/include/__config_site.in +++ b/libcxx/include/__config_site.in @@ -33,6 +33,7 @@ #cmakedefine _LIBCPP_ABI_NAMESPACE @_LIBCPP_ABI_NAMESPACE@ #cmakedefine _LIBCPP_HAS_PARALLEL_ALGORITHMS #cmakedefine _LIBCPP_HAS_NO_RANDOM_DEVICE +#cmakedefine _LIBCPP_HAS_NO_LOCALIZATION @_LIBCPP_ABI_DEFINES@ diff --git a/libcxx/include/__locale b/libcxx/include/__locale --- a/libcxx/include/__locale +++ b/libcxx/include/__locale @@ -11,6 +11,11 @@ #define _LIBCPP___LOCALE #include <__config> + +#if defined(_LIBCPP_HAS_NO_LOCALIZATION) +# error "Localization is not supported by this configuration of libc++" +#endif + #include #include #include diff --git a/libcxx/include/complex b/libcxx/include/complex --- a/libcxx/include/complex +++ b/libcxx/include/complex @@ -236,9 +236,12 @@ #include #include #include -#include #include +#if !defined(_LIBCPP_HAS_NO_LOCALIZATION) +# include // for std::basic_ostringstream +#endif + #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) #pragma GCC system_header #endif @@ -1430,6 +1433,7 @@ return __is; } +#if !defined(_LIBCPP_HAS_NO_LOCALIZATION) template basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& __os, const complex<_Tp>& __x) @@ -1441,6 +1445,7 @@ __s << '(' << __x.real() << ',' << __x.imag() << ')'; return __os << __s.str(); } +#endif // !_LIBCPP_HAS_NO_LOCALIZATION #if _LIBCPP_STD_VER > 11 // Literal suffix for complex number literals [complex.literals] diff --git a/libcxx/include/filesystem b/libcxx/include/filesystem --- a/libcxx/include/filesystem +++ b/libcxx/include/filesystem @@ -235,16 +235,19 @@ #include #include #include -#include #include #include #include #include #include -#include // for quoted #include #include +#if !defined(_LIBCPP_HAS_NO_LOCALIZATION) +# include +# include // for quoted +#endif + #include <__debug> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) @@ -661,6 +664,10 @@ template struct __is_pathable<_Tp, false, false, true> : __is_pathable_iter<_Tp> {}; +template +struct _PathCVT; + +#if !defined(_LIBCPP_HAS_NO_LOCALIZATION) template struct _PathCVT { static_assert(__can_convert_char<_ECharT>::value, @@ -703,6 +710,7 @@ _Traits::__range_end(__s)); } }; +#endif // !_LIBCPP_HAS_NO_LOCALIZATION template <> struct _PathCVT { @@ -779,12 +787,14 @@ _PathCVT<_ItVal>::__append_range(__pn_, __first, __last); } +#if !defined(_LIBCPP_HAS_NO_LOCALIZATION) // TODO Implement locale conversions. template > path(const _Source& __src, const locale& __loc, format = format::auto_format); template path(_InputIt __first, _InputIt _last, const locale& __loc, format = format::auto_format); +#endif _LIBCPP_INLINE_VISIBILITY ~path() = default; @@ -983,6 +993,10 @@ _LIBCPP_INLINE_VISIBILITY operator string_type() const { return __pn_; } + _LIBCPP_INLINE_VISIBILITY std::string string() const { return __pn_; } + _LIBCPP_INLINE_VISIBILITY std::string u8string() const { return __pn_; } + +#if !defined(_LIBCPP_HAS_NO_LOCALIZATION) template , class _Allocator = allocator<_ECharT> > basic_string<_ECharT, _Traits, _Allocator> @@ -995,19 +1009,22 @@ return __s; } - _LIBCPP_INLINE_VISIBILITY std::string string() const { return __pn_; } _LIBCPP_INLINE_VISIBILITY std::wstring wstring() const { return string(); } - _LIBCPP_INLINE_VISIBILITY std::string u8string() const { return __pn_; } _LIBCPP_INLINE_VISIBILITY std::u16string u16string() const { return string(); } _LIBCPP_INLINE_VISIBILITY std::u32string u32string() const { return string(); } +#endif // generic format observers + std::string generic_string() const { return __pn_; } + std::string generic_u8string() const { return __pn_; } + +#if !defined(_LIBCPP_HAS_NO_LOCALIZATION) template , class _Allocator = allocator<_ECharT> > basic_string<_ECharT, _Traits, _Allocator> @@ -1015,11 +1032,10 @@ return string<_ECharT, _Traits, _Allocator>(__a); } - std::string generic_string() const { return __pn_; } std::wstring generic_wstring() const { return string(); } - std::string generic_u8string() const { return __pn_; } std::u16string generic_u16string() const { return string(); } std::u32string generic_u32string() const { return string(); } +#endif private: int __compare(__string_view) const; @@ -1123,6 +1139,7 @@ iterator begin() const; iterator end() const; +#if !defined(_LIBCPP_HAS_NO_LOCALIZATION) template _LIBCPP_INLINE_VISIBILITY friend typename enable_if::value && @@ -1151,6 +1168,7 @@ __p = __tmp; return __is; } +#endif // !_LIBCPP_HAS_NO_LOCALIZATION friend _LIBCPP_INLINE_VISIBILITY bool operator==(const path& __lhs, const path& __rhs) noexcept { return __lhs.compare(__rhs) == 0; diff --git a/libcxx/src/CMakeLists.txt b/libcxx/src/CMakeLists.txt --- a/libcxx/src/CMakeLists.txt +++ b/libcxx/src/CMakeLists.txt @@ -19,20 +19,15 @@ include/atomic_support.h include/config_elast.h include/refstring.h - ios.cpp - iostream.cpp - locale.cpp memory.cpp mutex.cpp mutex_destructor.cpp new.cpp optional.cpp random_shuffle.cpp - regex.cpp shared_mutex.cpp stdexcept.cpp string.cpp - strstream.cpp support/runtime/exception_fallback.ipp support/runtime/exception_glibcxx.ipp support/runtime/exception_libcxxabi.ipp @@ -66,6 +61,16 @@ ) endif() +if (LIBCXX_ENABLE_LOCALIZATION) + list(APPEND LIBCXX_SOURCES + ios.cpp + iostream.cpp + locale.cpp + regex.cpp + strstream.cpp + ) +endif() + if(WIN32) list(APPEND LIBCXX_SOURCES support/win32/locale_win32.cpp diff --git a/libcxx/test/libcxx/depr/depr.str.strstreams/version.pass.cpp b/libcxx/test/libcxx/depr/depr.str.strstreams/version.pass.cpp --- a/libcxx/test/libcxx/depr/depr.str.strstreams/version.pass.cpp +++ b/libcxx/test/libcxx/depr/depr.str.strstreams/version.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // #include diff --git a/libcxx/test/libcxx/double_include.sh.cpp b/libcxx/test/libcxx/double_include.sh.cpp --- a/libcxx/test/libcxx/double_include.sh.cpp +++ b/libcxx/test/libcxx/double_include.sh.cpp @@ -49,7 +49,6 @@ #include #include #include -#include #include #include #include @@ -77,23 +76,17 @@ #include #include #include -#include #include #ifndef _LIBCPP_HAS_NO_THREADS #include #endif #include #include -#include -#include #include -#include -#include #include #include #include #include -#include #include #include #include @@ -105,11 +98,9 @@ #include #include #include -#include #include #include #include -#include #include #include #include @@ -117,7 +108,6 @@ #include #endif #include -#include #include #include #include @@ -125,11 +115,9 @@ #include #include #include -#include #include #include #include -#include #include #include #ifndef _LIBCPP_HAS_NO_THREADS @@ -149,6 +137,24 @@ #include #include +#ifndef _LIBCPP_HAS_NO_LOCALIZATION +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# if __cplusplus >= 201103L +# include +# endif +#endif + // experimental headers #if __cplusplus >= 201103L #include @@ -164,7 +170,6 @@ #include #include #include -#include #include #include #include diff --git a/libcxx/test/libcxx/experimental/memory/memory.resource.aliases/header_regex_libcpp_version.pass.cpp b/libcxx/test/libcxx/experimental/memory/memory.resource.aliases/header_regex_libcpp_version.pass.cpp --- a/libcxx/test/libcxx/experimental/memory/memory.resource.aliases/header_regex_libcpp_version.pass.cpp +++ b/libcxx/test/libcxx/experimental/memory/memory.resource.aliases/header_regex_libcpp_version.pass.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03 +// UNSUPPORTED: libcpp-has-no-localization // diff --git a/libcxx/test/libcxx/fuzzing/regex.pass.cpp b/libcxx/test/libcxx/fuzzing/regex.pass.cpp --- a/libcxx/test/libcxx/fuzzing/regex.pass.cpp +++ b/libcxx/test/libcxx/fuzzing/regex.pass.cpp @@ -8,6 +8,7 @@ // UNSUPPORTED: c++03, c++11 // UNSUPPORTED: no-exceptions +// UNSUPPORTED: libcpp-has-no-localization #include #include diff --git a/libcxx/test/libcxx/input.output/file.streams/lit.local.cfg b/libcxx/test/libcxx/input.output/file.streams/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/libcxx/input.output/file.streams/lit.local.cfg @@ -0,0 +1,4 @@ +# Load the same local configuration as the corresponding one in libcxx/test/std +import os +localConfig = os.path.realpath(__file__).replace('/test/libcxx/', '/test/std/') +config.load_from_path(localConfig, lit_config) diff --git a/libcxx/test/libcxx/input.output/iostream.format/lit.local.cfg b/libcxx/test/libcxx/input.output/iostream.format/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/libcxx/input.output/iostream.format/lit.local.cfg @@ -0,0 +1,4 @@ +# Load the same local configuration as the corresponding one in libcxx/test/std +import os +localConfig = os.path.realpath(__file__).replace('/test/libcxx/', '/test/std/') +config.load_from_path(localConfig, lit_config) diff --git a/libcxx/test/libcxx/input.output/iostream.objects/lit.local.cfg b/libcxx/test/libcxx/input.output/iostream.objects/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/libcxx/input.output/iostream.objects/lit.local.cfg @@ -0,0 +1,4 @@ +# Load the same local configuration as the corresponding one in libcxx/test/std +import os +localConfig = os.path.realpath(__file__).replace('/test/libcxx/', '/test/std/') +config.load_from_path(localConfig, lit_config) diff --git a/libcxx/test/libcxx/input.output/iostreams.base/lit.local.cfg b/libcxx/test/libcxx/input.output/iostreams.base/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/libcxx/input.output/iostreams.base/lit.local.cfg @@ -0,0 +1,4 @@ +# Load the same local configuration as the corresponding one in libcxx/test/std +import os +localConfig = os.path.realpath(__file__).replace('/test/libcxx/', '/test/std/') +config.load_from_path(localConfig, lit_config) diff --git a/libcxx/test/libcxx/input.output/stream.buffers/lit.local.cfg b/libcxx/test/libcxx/input.output/stream.buffers/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/libcxx/input.output/stream.buffers/lit.local.cfg @@ -0,0 +1,4 @@ +# Load the same local configuration as the corresponding one in libcxx/test/std +import os +localConfig = os.path.realpath(__file__).replace('/test/libcxx/', '/test/std/') +config.load_from_path(localConfig, lit_config) diff --git a/libcxx/test/libcxx/input.output/string.streams/lit.local.cfg b/libcxx/test/libcxx/input.output/string.streams/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/libcxx/input.output/string.streams/lit.local.cfg @@ -0,0 +1,4 @@ +# Load the same local configuration as the corresponding one in libcxx/test/std +import os +localConfig = os.path.realpath(__file__).replace('/test/libcxx/', '/test/std/') +config.load_from_path(localConfig, lit_config) diff --git a/libcxx/test/libcxx/localization/lit.local.cfg b/libcxx/test/libcxx/localization/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/libcxx/localization/lit.local.cfg @@ -0,0 +1,4 @@ +# Load the same local configuration as the corresponding one in libcxx/test/std +import os +localConfig = os.path.realpath(__file__).replace('/test/libcxx/', '/test/std/') +config.load_from_path(localConfig, lit_config) diff --git a/libcxx/test/libcxx/min_max_macros.compile.pass.cpp b/libcxx/test/libcxx/min_max_macros.compile.pass.cpp --- a/libcxx/test/libcxx/min_max_macros.compile.pass.cpp +++ b/libcxx/test/libcxx/min_max_macros.compile.pass.cpp @@ -61,8 +61,6 @@ TEST_MACROS(); #include TEST_MACROS(); -#include -TEST_MACROS(); #include TEST_MACROS(); #include @@ -109,8 +107,6 @@ TEST_MACROS(); #include TEST_MACROS(); -#include -TEST_MACROS(); #include TEST_MACROS(); #ifndef _LIBCPP_HAS_NO_THREADS @@ -121,16 +117,8 @@ TEST_MACROS(); #include TEST_MACROS(); -#include -TEST_MACROS(); -#include -TEST_MACROS(); #include TEST_MACROS(); -#include -TEST_MACROS(); -#include -TEST_MACROS(); #include TEST_MACROS(); #include @@ -139,8 +127,6 @@ TEST_MACROS(); #include TEST_MACROS(); -#include -TEST_MACROS(); #include TEST_MACROS(); #include @@ -159,16 +145,12 @@ TEST_MACROS(); #include TEST_MACROS(); -#include -TEST_MACROS(); #include TEST_MACROS(); #include TEST_MACROS(); #include TEST_MACROS(); -#include -TEST_MACROS(); #include TEST_MACROS(); #include @@ -181,8 +163,6 @@ #endif #include TEST_MACROS(); -#include -TEST_MACROS(); #include TEST_MACROS(); #include @@ -197,16 +177,12 @@ TEST_MACROS(); #include TEST_MACROS(); -#include -TEST_MACROS(); #include TEST_MACROS(); #include TEST_MACROS(); #include TEST_MACROS(); -#include -TEST_MACROS(); #include TEST_MACROS(); #include @@ -240,6 +216,37 @@ #include TEST_MACROS(); +#ifndef _LIBCPP_HAS_NO_LOCALIZATION +# include + TEST_MACROS(); +# include + TEST_MACROS(); +# include + TEST_MACROS(); +# include + TEST_MACROS(); +# include + TEST_MACROS(); +# include + TEST_MACROS(); +# include + TEST_MACROS(); +# include + TEST_MACROS(); +# include + TEST_MACROS(); +# include + TEST_MACROS(); +# include + TEST_MACROS(); +# include + TEST_MACROS(); +# if __cplusplus >= 201103L +# include + TEST_MACROS(); +# endif +#endif + // experimental headers #if __cplusplus >= 201103L #include @@ -262,8 +269,6 @@ TEST_MACROS(); #include TEST_MACROS(); -#include -TEST_MACROS(); #include TEST_MACROS(); #include diff --git a/libcxx/test/libcxx/modules/cinttypes_exports.compile.pass.cpp b/libcxx/test/libcxx/modules/cinttypes_exports.compile.pass.cpp --- a/libcxx/test/libcxx/modules/cinttypes_exports.compile.pass.cpp +++ b/libcxx/test/libcxx/modules/cinttypes_exports.compile.pass.cpp @@ -10,9 +10,10 @@ // are not modular // XFAIL: LIBCXX-WINDOWS-FIXME -// FIXME: The header is not supported for single-threaded systems, -// but still gets built as part of the 'std' module, which breaks the build. -// XFAIL: libcpp-has-no-threads +// Some headers are not available when these features are disabled, but they +// still get built as part of the 'std' module, which breaks the build. +// UNSUPPORTED: libcpp-has-no-threads +// UNSUPPORTED: libcpp-has-no-localization // REQUIRES: modules-support // ADDITIONAL_COMPILE_FLAGS: -fmodules diff --git a/libcxx/test/libcxx/modules/clocale_exports.compile.pass.cpp b/libcxx/test/libcxx/modules/clocale_exports.compile.pass.cpp --- a/libcxx/test/libcxx/modules/clocale_exports.compile.pass.cpp +++ b/libcxx/test/libcxx/modules/clocale_exports.compile.pass.cpp @@ -10,9 +10,10 @@ // are not modular // XFAIL: LIBCXX-WINDOWS-FIXME -// FIXME: The header is not supported for single-threaded systems, -// but still gets built as part of the 'std' module, which breaks the build. -// XFAIL: libcpp-has-no-threads +// Some headers are not available when these features are disabled, but they +// still get built as part of the 'std' module, which breaks the build. +// UNSUPPORTED: libcpp-has-no-threads +// UNSUPPORTED: libcpp-has-no-localization // UNSUPPORTED: c++03 diff --git a/libcxx/test/libcxx/modules/cstdint_exports.compile.pass.cpp b/libcxx/test/libcxx/modules/cstdint_exports.compile.pass.cpp --- a/libcxx/test/libcxx/modules/cstdint_exports.compile.pass.cpp +++ b/libcxx/test/libcxx/modules/cstdint_exports.compile.pass.cpp @@ -10,9 +10,10 @@ // are not modular // XFAIL: LIBCXX-WINDOWS-FIXME -// FIXME: The header is not supported for single-threaded systems, -// but still gets built as part of the 'std' module, which breaks the build. -// XFAIL: libcpp-has-no-threads +// Some headers are not available when these features are disabled, but they +// still get built as part of the 'std' module, which breaks the build. +// UNSUPPORTED: libcpp-has-no-threads +// UNSUPPORTED: libcpp-has-no-localization // Test that re-exports diff --git a/libcxx/test/libcxx/modules/inttypes_h_exports.compile.pass.cpp b/libcxx/test/libcxx/modules/inttypes_h_exports.compile.pass.cpp --- a/libcxx/test/libcxx/modules/inttypes_h_exports.compile.pass.cpp +++ b/libcxx/test/libcxx/modules/inttypes_h_exports.compile.pass.cpp @@ -10,9 +10,10 @@ // are not modular // XFAIL: LIBCXX-WINDOWS-FIXME -// FIXME: The header is not supported for single-threaded systems, -// but still gets built as part of the 'std' module, which breaks the build. -// XFAIL: libcpp-has-no-threads +// Some headers are not available when these features are disabled, but they +// still get built as part of the 'std' module, which breaks the build. +// UNSUPPORTED: libcpp-has-no-threads +// UNSUPPORTED: libcpp-has-no-localization // Test that intypes.h re-exports stdint.h diff --git a/libcxx/test/libcxx/modules/stdint_h_exports.compile.pass.cpp b/libcxx/test/libcxx/modules/stdint_h_exports.compile.pass.cpp --- a/libcxx/test/libcxx/modules/stdint_h_exports.compile.pass.cpp +++ b/libcxx/test/libcxx/modules/stdint_h_exports.compile.pass.cpp @@ -6,9 +6,10 @@ // //===----------------------------------------------------------------------===// -// FIXME: The header is not supported for single-threaded systems, -// but still gets built as part of the 'std' module, which breaks the build. -// XFAIL: libcpp-has-no-threads +// Some headers are not available when these features are disabled, but they +// still get built as part of the 'std' module, which breaks the build. +// UNSUPPORTED: libcpp-has-no-threads +// UNSUPPORTED: libcpp-has-no-localization // Test that int8_t and the like are exported from stdint.h, not inttypes.h diff --git a/libcxx/test/libcxx/modules/stds_include.sh.cpp b/libcxx/test/libcxx/modules/stds_include.sh.cpp --- a/libcxx/test/libcxx/modules/stds_include.sh.cpp +++ b/libcxx/test/libcxx/modules/stds_include.sh.cpp @@ -15,9 +15,10 @@ // are not modular // XFAIL: LIBCXX-WINDOWS-FIXME -// FIXME: The header is not supported for single-threaded systems, -// but still gets built as part of the 'std' module, which breaks the build. -// XFAIL: libcpp-has-no-threads +// Some headers are not available when these features are disabled, but they +// still get built as part of the 'std' module, which breaks the build. +// UNSUPPORTED: libcpp-has-no-threads +// UNSUPPORTED: libcpp-has-no-localization // REQUIRES: modules-support diff --git a/libcxx/test/libcxx/no_assert_include.compile.pass.cpp b/libcxx/test/libcxx/no_assert_include.compile.pass.cpp --- a/libcxx/test/libcxx/no_assert_include.compile.pass.cpp +++ b/libcxx/test/libcxx/no_assert_include.compile.pass.cpp @@ -39,7 +39,6 @@ #include #include #include -#include #include #include #include @@ -66,23 +65,17 @@ #include #include #include -#include #include #ifndef _LIBCPP_HAS_NO_THREADS #include #endif #include #include -#include -#include #include -#include -#include #include #include #include #include -#include #include #include #include @@ -93,11 +86,9 @@ #include #include #include -#include #include #include #include -#include #include #include #include @@ -105,7 +96,6 @@ #include #endif #include -#include #include #include #include @@ -113,11 +103,9 @@ #include #include #include -#include #include #include #include -#include #include #include #ifndef _LIBCPP_HAS_NO_THREADS @@ -137,6 +125,24 @@ #include #include +#ifndef _LIBCPP_HAS_NO_LOCALIZATION +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# if __cplusplus >= 201103L +# include +# endif +#endif + // experimental headers #if __cplusplus >= 201103L #include @@ -152,7 +158,6 @@ #include #include #include -#include #include #include #include diff --git a/libcxx/test/std/depr/depr.ios.members/lit.local.cfg b/libcxx/test/std/depr/depr.ios.members/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/std/depr/depr.ios.members/lit.local.cfg @@ -0,0 +1,2 @@ +if 'libcpp-has-no-localization' in config.available_features: + config.unsupported = True diff --git a/libcxx/test/std/depr/depr.str.strstreams/lit.local.cfg b/libcxx/test/std/depr/depr.str.strstreams/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/std/depr/depr.str.strstreams/lit.local.cfg @@ -0,0 +1,2 @@ +if 'libcpp-has-no-localization' in config.available_features: + config.unsupported = True diff --git a/libcxx/test/std/diagnostics/syserr/syserr.errcode/syserr.errcode.nonmembers/stream_inserter.pass.cpp b/libcxx/test/std/diagnostics/syserr/syserr.errcode/syserr.errcode.nonmembers/stream_inserter.pass.cpp --- a/libcxx/test/std/diagnostics/syserr/syserr.errcode/syserr.errcode.nonmembers/stream_inserter.pass.cpp +++ b/libcxx/test/std/diagnostics/syserr/syserr.errcode/syserr.errcode.nonmembers/stream_inserter.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // class error_code diff --git a/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.cons/ostream_joiner.cons.pass.cpp b/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.cons/ostream_joiner.cons.pass.cpp --- a/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.cons/ostream_joiner.cons.pass.cpp +++ b/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.cons/ostream_joiner.cons.pass.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11 +// UNSUPPORTED: libcpp-has-no-localization // // diff --git a/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.creation/make_ostream_joiner.pass.cpp b/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.creation/make_ostream_joiner.pass.cpp --- a/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.creation/make_ostream_joiner.pass.cpp +++ b/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.creation/make_ostream_joiner.pass.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11 +// UNSUPPORTED: libcpp-has-no-localization // // diff --git a/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.ops/ostream_joiner.op.assign.pass.cpp b/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.ops/ostream_joiner.op.assign.pass.cpp --- a/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.ops/ostream_joiner.op.assign.pass.cpp +++ b/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.ops/ostream_joiner.op.assign.pass.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11 +// UNSUPPORTED: libcpp-has-no-localization // // diff --git a/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.ops/ostream_joiner.op.postincrement.pass.cpp b/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.ops/ostream_joiner.op.postincrement.pass.cpp --- a/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.ops/ostream_joiner.op.postincrement.pass.cpp +++ b/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.ops/ostream_joiner.op.postincrement.pass.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11 +// UNSUPPORTED: libcpp-has-no-localization // // diff --git a/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.ops/ostream_joiner.op.pretincrement.pass.cpp b/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.ops/ostream_joiner.op.pretincrement.pass.cpp --- a/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.ops/ostream_joiner.op.pretincrement.pass.cpp +++ b/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.ops/ostream_joiner.op.pretincrement.pass.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11 +// UNSUPPORTED: libcpp-has-no-localization // // diff --git a/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.ops/ostream_joiner.op.star.pass.cpp b/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.ops/ostream_joiner.op.star.pass.cpp --- a/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.ops/ostream_joiner.op.star.pass.cpp +++ b/libcxx/test/std/experimental/iterator/ostream.joiner/ostream.joiner.ops/ostream_joiner.op.star.pass.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11 +// UNSUPPORTED: libcpp-has-no-localization // // diff --git a/libcxx/test/std/experimental/memory/memory.resource.aliases/header_regex_synop.pass.cpp b/libcxx/test/std/experimental/memory/memory.resource.aliases/header_regex_synop.pass.cpp --- a/libcxx/test/std/experimental/memory/memory.resource.aliases/header_regex_synop.pass.cpp +++ b/libcxx/test/std/experimental/memory/memory.resource.aliases/header_regex_synop.pass.cpp @@ -8,6 +8,7 @@ //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03 +// UNSUPPORTED: libcpp-has-no-localization // diff --git a/libcxx/test/std/input.output/file.streams/lit.local.cfg b/libcxx/test/std/input.output/file.streams/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/std/input.output/file.streams/lit.local.cfg @@ -0,0 +1,3 @@ +# All non-trivial uses of iostreams require localization support +if 'libcpp-has-no-localization' in config.available_features: + config.unsupported = True diff --git a/libcxx/test/std/input.output/filesystems/class.path/path.member/path.append.pass.cpp b/libcxx/test/std/input.output/filesystems/class.path/path.member/path.append.pass.cpp --- a/libcxx/test/std/input.output/filesystems/class.path/path.member/path.append.pass.cpp +++ b/libcxx/test/std/input.output/filesystems/class.path/path.member/path.append.pass.cpp @@ -8,6 +8,9 @@ // UNSUPPORTED: c++03 +// These tests require locale for non-char paths +// UNSUPPORTED: libcpp-has-no-localization + // // class path diff --git a/libcxx/test/std/input.output/filesystems/class.path/path.member/path.assign/source.pass.cpp b/libcxx/test/std/input.output/filesystems/class.path/path.member/path.assign/source.pass.cpp --- a/libcxx/test/std/input.output/filesystems/class.path/path.member/path.assign/source.pass.cpp +++ b/libcxx/test/std/input.output/filesystems/class.path/path.member/path.assign/source.pass.cpp @@ -8,6 +8,9 @@ // UNSUPPORTED: c++03 +// These tests require locale for non-char paths +// UNSUPPORTED: libcpp-has-no-localization + // // class path diff --git a/libcxx/test/std/input.output/filesystems/class.path/path.member/path.concat.pass.cpp b/libcxx/test/std/input.output/filesystems/class.path/path.member/path.concat.pass.cpp --- a/libcxx/test/std/input.output/filesystems/class.path/path.member/path.concat.pass.cpp +++ b/libcxx/test/std/input.output/filesystems/class.path/path.member/path.concat.pass.cpp @@ -8,6 +8,9 @@ // UNSUPPORTED: c++03 +// These tests require locale for non-char paths +// UNSUPPORTED: libcpp-has-no-localization + // // class path diff --git a/libcxx/test/std/input.output/filesystems/class.path/path.member/path.construct/source.pass.cpp b/libcxx/test/std/input.output/filesystems/class.path/path.member/path.construct/source.pass.cpp --- a/libcxx/test/std/input.output/filesystems/class.path/path.member/path.construct/source.pass.cpp +++ b/libcxx/test/std/input.output/filesystems/class.path/path.member/path.construct/source.pass.cpp @@ -8,6 +8,9 @@ // UNSUPPORTED: c++03 +// These tests require locale for non-char paths +// UNSUPPORTED: libcpp-has-no-localization + // // class path diff --git a/libcxx/test/std/input.output/filesystems/class.path/path.member/path.generic.obs/generic_string_alloc.pass.cpp b/libcxx/test/std/input.output/filesystems/class.path/path.member/path.generic.obs/generic_string_alloc.pass.cpp --- a/libcxx/test/std/input.output/filesystems/class.path/path.member/path.generic.obs/generic_string_alloc.pass.cpp +++ b/libcxx/test/std/input.output/filesystems/class.path/path.member/path.generic.obs/generic_string_alloc.pass.cpp @@ -8,6 +8,9 @@ // UNSUPPORTED: c++03 +// These tests require locale for non-char paths +// UNSUPPORTED: libcpp-has-no-localization + // // class path diff --git a/libcxx/test/std/input.output/filesystems/class.path/path.member/path.generic.obs/named_overloads.pass.cpp b/libcxx/test/std/input.output/filesystems/class.path/path.member/path.generic.obs/named_overloads.pass.cpp --- a/libcxx/test/std/input.output/filesystems/class.path/path.member/path.generic.obs/named_overloads.pass.cpp +++ b/libcxx/test/std/input.output/filesystems/class.path/path.member/path.generic.obs/named_overloads.pass.cpp @@ -8,6 +8,9 @@ // UNSUPPORTED: c++03 +// These tests require locale for non-char paths +// UNSUPPORTED: libcpp-has-no-localization + // // class path diff --git a/libcxx/test/std/input.output/filesystems/class.path/path.member/path.native.obs/named_overloads.pass.cpp b/libcxx/test/std/input.output/filesystems/class.path/path.member/path.native.obs/named_overloads.pass.cpp --- a/libcxx/test/std/input.output/filesystems/class.path/path.member/path.native.obs/named_overloads.pass.cpp +++ b/libcxx/test/std/input.output/filesystems/class.path/path.member/path.native.obs/named_overloads.pass.cpp @@ -8,6 +8,9 @@ // UNSUPPORTED: c++03 +// These tests require locale for non-char paths +// UNSUPPORTED: libcpp-has-no-localization + // // class path diff --git a/libcxx/test/std/input.output/filesystems/class.path/path.member/path.native.obs/string_alloc.pass.cpp b/libcxx/test/std/input.output/filesystems/class.path/path.member/path.native.obs/string_alloc.pass.cpp --- a/libcxx/test/std/input.output/filesystems/class.path/path.member/path.native.obs/string_alloc.pass.cpp +++ b/libcxx/test/std/input.output/filesystems/class.path/path.member/path.native.obs/string_alloc.pass.cpp @@ -9,6 +9,9 @@ // UNSUPPORTED: c++03 // REQUIRES: libc++ +// These tests require locale for non-char paths +// UNSUPPORTED: libcpp-has-no-localization + // // class path diff --git a/libcxx/test/std/input.output/filesystems/class.path/path.nonmember/path.io.pass.cpp b/libcxx/test/std/input.output/filesystems/class.path/path.nonmember/path.io.pass.cpp --- a/libcxx/test/std/input.output/filesystems/class.path/path.nonmember/path.io.pass.cpp +++ b/libcxx/test/std/input.output/filesystems/class.path/path.nonmember/path.io.pass.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03 +// UNSUPPORTED: libcpp-has-no-localization // diff --git a/libcxx/test/std/input.output/input.output.general/lit.local.cfg b/libcxx/test/std/input.output/input.output.general/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/std/input.output/input.output.general/lit.local.cfg @@ -0,0 +1,3 @@ +# All non-trivial uses of iostreams require localization support +if 'libcpp-has-no-localization' in config.available_features: + config.unsupported = True diff --git a/libcxx/test/std/input.output/iostream.format/lit.local.cfg b/libcxx/test/std/input.output/iostream.format/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/std/input.output/iostream.format/lit.local.cfg @@ -0,0 +1,3 @@ +# All non-trivial uses of iostreams require localization support +if 'libcpp-has-no-localization' in config.available_features: + config.unsupported = True diff --git a/libcxx/test/std/input.output/iostream.forward/lit.local.cfg b/libcxx/test/std/input.output/iostream.forward/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/std/input.output/iostream.forward/lit.local.cfg @@ -0,0 +1,3 @@ +# All non-trivial uses of iostreams require localization support +if 'libcpp-has-no-localization' in config.available_features: + config.unsupported = True diff --git a/libcxx/test/std/input.output/iostream.objects/lit.local.cfg b/libcxx/test/std/input.output/iostream.objects/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/std/input.output/iostream.objects/lit.local.cfg @@ -0,0 +1,3 @@ +# All non-trivial uses of iostreams require localization support +if 'libcpp-has-no-localization' in config.available_features: + config.unsupported = True diff --git a/libcxx/test/std/input.output/iostreams.base/lit.local.cfg b/libcxx/test/std/input.output/iostreams.base/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/std/input.output/iostreams.base/lit.local.cfg @@ -0,0 +1,3 @@ +# All non-trivial uses of iostreams require localization support +if 'libcpp-has-no-localization' in config.available_features: + config.unsupported = True diff --git a/libcxx/test/std/input.output/iostreams.requirements/lit.local.cfg b/libcxx/test/std/input.output/iostreams.requirements/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/std/input.output/iostreams.requirements/lit.local.cfg @@ -0,0 +1,3 @@ +# All non-trivial uses of iostreams require localization support +if 'libcpp-has-no-localization' in config.available_features: + config.unsupported = True diff --git a/libcxx/test/std/input.output/stream.buffers/lit.local.cfg b/libcxx/test/std/input.output/stream.buffers/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/std/input.output/stream.buffers/lit.local.cfg @@ -0,0 +1,3 @@ +# All non-trivial uses of iostreams require localization support +if 'libcpp-has-no-localization' in config.available_features: + config.unsupported = True diff --git a/libcxx/test/std/input.output/string.streams/lit.local.cfg b/libcxx/test/std/input.output/string.streams/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/std/input.output/string.streams/lit.local.cfg @@ -0,0 +1,3 @@ +# All non-trivial uses of iostreams require localization support +if 'libcpp-has-no-localization' in config.available_features: + config.unsupported = True diff --git a/libcxx/test/std/iterators/stream.iterators/lit.local.cfg b/libcxx/test/std/iterators/stream.iterators/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/std/iterators/stream.iterators/lit.local.cfg @@ -0,0 +1,3 @@ +# stream iterators rely on the streams library, which requires localization +if 'libcpp-has-no-localization' in config.available_features: + config.unsupported = True diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/iomanip.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/iomanip.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/iomanip.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/iomanip.version.pass.cpp @@ -9,6 +9,8 @@ // WARNING: This test was generated by generate_feature_test_macro_components.py // and should not be edited manually. +// UNSUPPORTED: libcpp-has-no-localization + // // Test the feature test macros defined by diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/istream.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/istream.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/istream.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/istream.version.pass.cpp @@ -9,6 +9,8 @@ // WARNING: This test was generated by generate_feature_test_macro_components.py // and should not be edited manually. +// UNSUPPORTED: libcpp-has-no-localization + // // Test the feature test macros defined by diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/locale.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/locale.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/locale.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/locale.version.pass.cpp @@ -9,6 +9,8 @@ // WARNING: This test was generated by generate_feature_test_macro_components.py // and should not be edited manually. +// UNSUPPORTED: libcpp-has-no-localization + // // Test the feature test macros defined by diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/ostream.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/ostream.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/ostream.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/ostream.version.pass.cpp @@ -9,6 +9,8 @@ // WARNING: This test was generated by generate_feature_test_macro_components.py // and should not be edited manually. +// UNSUPPORTED: libcpp-has-no-localization + // // Test the feature test macros defined by diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/regex.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/regex.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/regex.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/regex.version.pass.cpp @@ -9,6 +9,8 @@ // WARNING: This test was generated by generate_feature_test_macro_components.py // and should not be edited manually. +// UNSUPPORTED: libcpp-has-no-localization + // // Test the feature test macros defined by diff --git a/libcxx/test/std/localization/lit.local.cfg b/libcxx/test/std/localization/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/std/localization/lit.local.cfg @@ -0,0 +1,3 @@ +# tests are obviously not supported when localization support is disabled +if 'libcpp-has-no-localization' in config.available_features: + config.unsupported = True diff --git a/libcxx/test/std/namespace/addressable_functions.sh.cpp b/libcxx/test/std/namespace/addressable_functions.sh.cpp --- a/libcxx/test/std/namespace/addressable_functions.sh.cpp +++ b/libcxx/test/std/namespace/addressable_functions.sh.cpp @@ -17,6 +17,9 @@ // RUN: %{cxx} %t.tu1.o %t.tu2.o %{flags} %{link_flags} -o %t.exe // RUN: %{exec} %t.exe +// The functions checked below come from & friends +// UNSUPPORTED: libcpp-has-no-localization + #include #include #include diff --git a/libcxx/test/std/numerics/complex.number/complex.ops/stream_input.pass.cpp b/libcxx/test/std/numerics/complex.number/complex.ops/stream_input.pass.cpp --- a/libcxx/test/std/numerics/complex.number/complex.ops/stream_input.pass.cpp +++ b/libcxx/test/std/numerics/complex.number/complex.ops/stream_input.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/complex.number/complex.ops/stream_output.pass.cpp b/libcxx/test/std/numerics/complex.number/complex.ops/stream_output.pass.cpp --- a/libcxx/test/std/numerics/complex.number/complex.ops/stream_output.pass.cpp +++ b/libcxx/test/std/numerics/complex.number/complex.ops/stream_output.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.disc/ctor_result_type.pass.cpp b/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.disc/ctor_result_type.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.disc/ctor_result_type.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.disc/ctor_result_type.pass.cpp @@ -13,6 +13,9 @@ // explicit discard_block_engine(result_type s = default_seed); +// Serializing/deserializing the state of the RNG requires iostreams +// UNSUPPORTED: libcpp-has-no-localization + #include #include #include diff --git a/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.disc/ctor_sseq.pass.cpp b/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.disc/ctor_sseq.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.disc/ctor_sseq.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.disc/ctor_sseq.pass.cpp @@ -13,6 +13,9 @@ // template explicit discard_block_engine(Sseq& q); +// Serializing/deserializing the state of the RNG requires iostreams +// UNSUPPORTED: libcpp-has-no-localization + #include #include #include diff --git a/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.disc/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.disc/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.disc/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.disc/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.ibits/ctor_result_type.pass.cpp b/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.ibits/ctor_result_type.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.ibits/ctor_result_type.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.ibits/ctor_result_type.pass.cpp @@ -13,6 +13,9 @@ // explicit independent_bits_engine(result_type s = default_seed); +// Serializing/deserializing the state of the RNG requires iostreams +// UNSUPPORTED: libcpp-has-no-localization + #include #include #include diff --git a/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.ibits/ctor_sseq.pass.cpp b/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.ibits/ctor_sseq.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.ibits/ctor_sseq.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.ibits/ctor_sseq.pass.cpp @@ -13,6 +13,9 @@ // template explicit independent_bits_engine(Sseq& q); +// Serializing/deserializing the state of the RNG requires iostreams +// UNSUPPORTED: libcpp-has-no-localization + #include #include #include diff --git a/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.ibits/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.ibits/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.ibits/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.ibits/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.shuf/ctor_result_type.pass.cpp b/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.shuf/ctor_result_type.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.shuf/ctor_result_type.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.shuf/ctor_result_type.pass.cpp @@ -13,6 +13,9 @@ // explicit shuffle_order_engine(result_type s = default_seed); +// Serializing/deserializing the state of the RNG requires iostreams +// UNSUPPORTED: libcpp-has-no-localization + #include #include #include diff --git a/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.shuf/ctor_sseq.pass.cpp b/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.shuf/ctor_sseq.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.shuf/ctor_sseq.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.shuf/ctor_sseq.pass.cpp @@ -13,6 +13,9 @@ // template explicit shuffle_order_engine(Sseq& q); +// Serializing/deserializing the state of the RNG requires iostreams +// UNSUPPORTED: libcpp-has-no-localization + #include #include #include diff --git a/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.shuf/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.shuf/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.shuf/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.adapt/rand.adapt.shuf/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // class bernoulli_distribution diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval.PR44847.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval.PR44847.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval.PR44847.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval.PR44847.pass.cpp @@ -15,6 +15,9 @@ // Test the fix for https://llvm.org/PR44847. +// Serializing/deserializing the state of the RNG requires iostreams +// UNSUPPORTED: libcpp-has-no-localization + #include #include #include diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.eng/rand.eng.lcong/ctor_result_type.pass.cpp b/libcxx/test/std/numerics/rand/rand.eng/rand.eng.lcong/ctor_result_type.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.eng/rand.eng.lcong/ctor_result_type.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.eng/rand.eng.lcong/ctor_result_type.pass.cpp @@ -13,6 +13,9 @@ // explicit linear_congruential_engine(result_type s = default_seed); +// Serializing/deserializing the state of the RNG requires iostreams +// UNSUPPORTED: libcpp-has-no-localization + #include #include #include diff --git a/libcxx/test/std/numerics/rand/rand.eng/rand.eng.lcong/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.eng/rand.eng.lcong/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.eng/rand.eng.lcong/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.eng/rand.eng.lcong/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/numerics/rand/rand.eng/rand.eng.mers/ctor_result_type.pass.cpp b/libcxx/test/std/numerics/rand/rand.eng/rand.eng.mers/ctor_result_type.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.eng/rand.eng.mers/ctor_result_type.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.eng/rand.eng.mers/ctor_result_type.pass.cpp @@ -15,6 +15,9 @@ // explicit mersenne_twister_engine(result_type s = default_seed); +// Serializing/deserializing the state of the RNG requires iostreams +// UNSUPPORTED: libcpp-has-no-localization + #include #include #include diff --git a/libcxx/test/std/numerics/rand/rand.eng/rand.eng.mers/ctor_sseq.pass.cpp b/libcxx/test/std/numerics/rand/rand.eng/rand.eng.mers/ctor_sseq.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.eng/rand.eng.mers/ctor_sseq.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.eng/rand.eng.mers/ctor_sseq.pass.cpp @@ -15,6 +15,9 @@ // template explicit mersenne_twister_engine(Sseq& q); +// Serializing/deserializing the state of the RNG requires iostreams +// UNSUPPORTED: libcpp-has-no-localization + #include #include #include diff --git a/libcxx/test/std/numerics/rand/rand.eng/rand.eng.mers/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.eng/rand.eng.mers/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.eng/rand.eng.mers/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.eng/rand.eng.mers/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template #include #include diff --git a/libcxx/test/std/numerics/rand/rand.eng/rand.eng.sub/ctor_sseq.pass.cpp b/libcxx/test/std/numerics/rand/rand.eng/rand.eng.sub/ctor_sseq.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.eng/rand.eng.sub/ctor_sseq.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.eng/rand.eng.sub/ctor_sseq.pass.cpp @@ -13,6 +13,9 @@ // template explicit subtract_with_carry_engine(Sseq& q); +// Serializing/deserializing the state of the RNG requires iostreams +// UNSUPPORTED: libcpp-has-no-localization + #include #include #include diff --git a/libcxx/test/std/numerics/rand/rand.eng/rand.eng.sub/io.pass.cpp b/libcxx/test/std/numerics/rand/rand.eng/rand.eng.sub/io.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.eng/rand.eng.sub/io.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.eng/rand.eng.sub/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/re/lit.local.cfg b/libcxx/test/std/re/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/std/re/lit.local.cfg @@ -0,0 +1,3 @@ +# Unfortunately, uses locales in regex_traits +if 'libcpp-has-no-localization' in config.available_features: + config.unsupported = True diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/lit.local.cfg b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/lit.local.cfg new file mode 100644 --- /dev/null +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/lit.local.cfg @@ -0,0 +1,3 @@ +# These std::string functions require iostreams, which requires localization +if 'libcpp-has-no-localization' in config.available_features: + config.unsupported = True diff --git a/libcxx/test/std/strings/string.view/string.view.io/stream_insert.pass.cpp b/libcxx/test/std/strings/string.view/string.view.io/stream_insert.pass.cpp --- a/libcxx/test/std/strings/string.view/string.view.io/stream_insert.pass.cpp +++ b/libcxx/test/std/strings/string.view/string.view.io/stream_insert.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // template diff --git a/libcxx/test/std/strings/string.view/string.view.nonmem/quoted.pass.cpp b/libcxx/test/std/strings/string.view/string.view.nonmem/quoted.pass.cpp --- a/libcxx/test/std/strings/string.view/string.view.nonmem/quoted.pass.cpp +++ b/libcxx/test/std/strings/string.view/string.view.nonmem/quoted.pass.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11 +// UNSUPPORTED: libcpp-has-no-localization // diff --git a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.id/stream.pass.cpp b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.id/stream.pass.cpp --- a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.id/stream.pass.cpp +++ b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.id/stream.pass.cpp @@ -5,8 +5,9 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// + // UNSUPPORTED: libcpp-has-no-threads +// UNSUPPORTED: libcpp-has-no-localization // diff --git a/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.special/io.fail.cpp b/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.special/io.fail.cpp --- a/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.special/io.fail.cpp +++ b/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.special/io.fail.cpp @@ -6,8 +6,10 @@ // //===----------------------------------------------------------------------===// +// Because we don't have a functioning decltype in C++03 // UNSUPPORTED: c++03 -// Because we don't have a functioning decltype in C++03 + +// UNSUPPORTED: libcpp-has-no-localization // diff --git a/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.special/io.pass.cpp b/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.special/io.pass.cpp --- a/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.special/io.pass.cpp +++ b/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.special/io.pass.cpp @@ -9,6 +9,8 @@ // UNSUPPORTED: c++03 // Because we don't have a functioning decltype in C++03 +// UNSUPPORTED: libcpp-has-no-localization + // // unique_ptr diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.io/io.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.io/io.pass.cpp --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.io/io.pass.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.io/io.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // // shared_ptr diff --git a/libcxx/test/std/utilities/template.bitset/bitset.operators/stream_in.pass.cpp b/libcxx/test/std/utilities/template.bitset/bitset.operators/stream_in.pass.cpp --- a/libcxx/test/std/utilities/template.bitset/bitset.operators/stream_in.pass.cpp +++ b/libcxx/test/std/utilities/template.bitset/bitset.operators/stream_in.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // test: // template diff --git a/libcxx/test/std/utilities/template.bitset/bitset.operators/stream_out.pass.cpp b/libcxx/test/std/utilities/template.bitset/bitset.operators/stream_out.pass.cpp --- a/libcxx/test/std/utilities/template.bitset/bitset.operators/stream_out.pass.cpp +++ b/libcxx/test/std/utilities/template.bitset/bitset.operators/stream_out.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: libcpp-has-no-localization + // test: // template diff --git a/libcxx/test/std/utilities/time/time.cal/time.cal.day/time.cal.day.nonmembers/streaming.pass.cpp b/libcxx/test/std/utilities/time/time.cal/time.cal.day/time.cal.day.nonmembers/streaming.pass.cpp --- a/libcxx/test/std/utilities/time/time.cal/time.cal.day/time.cal.day.nonmembers/streaming.pass.cpp +++ b/libcxx/test/std/utilities/time/time.cal/time.cal.day/time.cal.day.nonmembers/streaming.pass.cpp @@ -5,7 +5,9 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// + // UNSUPPORTED: c++03, c++11, c++14, c++17 +// UNSUPPORTED: libcpp-has-no-localization // XFAIL: * // diff --git a/libcxx/utils/ci/buildkite-pipeline.yml b/libcxx/utils/ci/buildkite-pipeline.yml --- a/libcxx/utils/ci/buildkite-pipeline.yml +++ b/libcxx/utils/ci/buildkite-pipeline.yml @@ -113,6 +113,13 @@ agents: queue: "libcxx-builders" + - label: "No locale" + command: "libcxx/utils/ci/run-buildbot.sh generic-no-localization" + artifact_paths: + - "**/test-results.xml" + agents: + queue: "libcxx-builders" + - label: "MacOS C++20" command: "libcxx/utils/ci/run-buildbot.sh generic-cxx2a" artifact_paths: diff --git a/libcxx/utils/ci/run-buildbot.sh b/libcxx/utils/ci/run-buildbot.sh --- a/libcxx/utils/ci/run-buildbot.sh +++ b/libcxx/utils/ci/run-buildbot.sh @@ -143,6 +143,12 @@ generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-random_device.cmake" check-cxx-cxxabi ;; +generic-no-localization) + export CC=clang + export CXX=clang++ + generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-localization.cmake" + check-cxx-cxxabi +;; x86_64-apple-system) export CC=clang export CXX=clang++ diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py --- a/libcxx/utils/generate_feature_test_macro_components.py +++ b/libcxx/utils/generate_feature_test_macro_components.py @@ -493,6 +493,11 @@ "atomic": ["UNSUPPORTED: libcpp-has-no-threads"], "shared_mutex": ["UNSUPPORTED: libcpp-has-no-threads"], "thread": ["UNSUPPORTED: libcpp-has-no-threads"], + "iomanip": ["UNSUPPORTED: libcpp-has-no-localization"], + "istream": ["UNSUPPORTED: libcpp-has-no-localization"], + "locale": ["UNSUPPORTED: libcpp-has-no-localization"], + "ostream": ["UNSUPPORTED: libcpp-has-no-localization"], + "regex": ["UNSUPPORTED: libcpp-has-no-localization"], } def get_std_dialects(): diff --git a/libcxx/utils/libcxx/test/features.py b/libcxx/utils/libcxx/test/features.py --- a/libcxx/utils/libcxx/test/features.py +++ b/libcxx/utils/libcxx/test/features.py @@ -75,6 +75,7 @@ '_LIBCPP_ABI_VERSION': 'libcpp-abi-version', '_LIBCPP_ABI_UNSTABLE': 'libcpp-abi-unstable', '_LIBCPP_HAS_NO_RANDOM_DEVICE': 'libcpp-has-no-random-device', + '_LIBCPP_HAS_NO_LOCALIZATION': 'libcpp-has-no-localization', } for macro, feature in macros.items(): DEFAULT_FEATURES += [