a source of randomness, such as some embedded platforms. When this is not
supported, most of <random> 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: <iostream>, <regex>, <locale>
+ 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.")
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)
--- /dev/null
+set(LIBCXX_ENABLE_LOCALIZATION OFF CACHE BOOL "")
#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@
#define _LIBCPP___LOCALE
#include <__config>
+
+#if defined(_LIBCPP_HAS_NO_LOCALIZATION)
+# error "Localization is not supported by this configuration of libc++"
+#endif
+
#include <string>
#include <memory>
#include <utility>
#include <stdexcept>
#include <cmath>
#include <iosfwd>
-#include <sstream>
#include <version>
+#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
+# include <sstream> // for std::basic_ostringstream
+#endif
+
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
return __is;
}
+#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
template<class _Tp, class _CharT, class _Traits>
basic_ostream<_CharT, _Traits>&
operator<<(basic_ostream<_CharT, _Traits>& __os, const complex<_Tp>& __x)
__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]
#include <chrono>
#include <iterator>
#include <iosfwd>
-#include <locale>
#include <memory>
#include <stack>
#include <string>
#include <system_error>
#include <utility>
-#include <iomanip> // for quoted
#include <string_view>
#include <version>
+#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
+# include <locale>
+# include <iomanip> // for quoted
+#endif
+
#include <__debug>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
struct __is_pathable<_Tp, false, false, true> : __is_pathable_iter<_Tp> {};
template <class _ECharT>
+struct _PathCVT;
+
+#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
+template <class _ECharT>
struct _PathCVT {
static_assert(__can_convert_char<_ECharT>::value,
"Char type not convertible");
_Traits::__range_end(__s));
}
};
+#endif // !_LIBCPP_HAS_NO_LOCALIZATION
template <>
struct _PathCVT<char> {
_PathCVT<_ItVal>::__append_range(__pn_, __first, __last);
}
+#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
// TODO Implement locale conversions.
template <class _Source, class = _EnableIfPathable<_Source, void> >
path(const _Source& __src, const locale& __loc, format = format::auto_format);
template <class _InputIt>
path(_InputIt __first, _InputIt _last, const locale& __loc,
format = format::auto_format);
+#endif
_LIBCPP_INLINE_VISIBILITY
~path() = default;
_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 _ECharT, class _Traits = char_traits<_ECharT>,
class _Allocator = allocator<_ECharT> >
basic_string<_ECharT, _Traits, _Allocator>
return __s;
}
- _LIBCPP_INLINE_VISIBILITY std::string string() const { return __pn_; }
_LIBCPP_INLINE_VISIBILITY std::wstring wstring() const {
return string<wchar_t>();
}
- _LIBCPP_INLINE_VISIBILITY std::string u8string() const { return __pn_; }
_LIBCPP_INLINE_VISIBILITY std::u16string u16string() const {
return string<char16_t>();
}
_LIBCPP_INLINE_VISIBILITY std::u32string u32string() const {
return string<char32_t>();
}
+#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 _ECharT, class _Traits = char_traits<_ECharT>,
class _Allocator = allocator<_ECharT> >
basic_string<_ECharT, _Traits, _Allocator>
return string<_ECharT, _Traits, _Allocator>(__a);
}
- std::string generic_string() const { return __pn_; }
std::wstring generic_wstring() const { return string<wchar_t>(); }
- std::string generic_u8string() const { return __pn_; }
std::u16string generic_u16string() const { return string<char16_t>(); }
std::u32string generic_u32string() const { return string<char32_t>(); }
+#endif
private:
int __compare(__string_view) const;
iterator begin() const;
iterator end() const;
+#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
template <class _CharT, class _Traits>
_LIBCPP_INLINE_VISIBILITY friend
typename enable_if<is_same<_CharT, char>::value &&
__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;
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
)
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
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <strstream>
#include <strstream>
#include <climits>
#include <clocale>
#include <cmath>
-#include <codecvt>
#include <compare>
#include <complex>
#include <complex.h>
#include <filesystem>
#include <float.h>
#include <forward_list>
-#include <fstream>
#include <functional>
#ifndef _LIBCPP_HAS_NO_THREADS
#include <future>
#endif
#include <initializer_list>
#include <inttypes.h>
-#include <iomanip>
-#include <ios>
#include <iosfwd>
-#include <iostream>
-#include <istream>
#include <iterator>
#include <limits>
#include <limits.h>
#include <list>
-#include <locale>
#include <locale.h>
#include <map>
#include <math.h>
#include <numbers>
#include <numeric>
#include <optional>
-#include <ostream>
#include <queue>
#include <random>
#include <ratio>
-#include <regex>
#include <scoped_allocator>
#include <set>
#include <setjmp.h>
#include <shared_mutex>
#endif
#include <span>
-#include <sstream>
#include <stack>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
-#include <streambuf>
#include <string>
#include <string.h>
#include <string_view>
-#include <strstream>
#include <system_error>
#include <tgmath.h>
#ifndef _LIBCPP_HAS_NO_THREADS
#include <wchar.h>
#include <wctype.h>
+#ifndef _LIBCPP_HAS_NO_LOCALIZATION
+# include <codecvt>
+# include <fstream>
+# include <iomanip>
+# include <ios>
+# include <iostream>
+# include <istream>
+# include <locale>
+# include <ostream>
+# include <regex>
+# include <sstream>
+# include <streambuf>
+# include <strstream>
+# if __cplusplus >= 201103L
+# include <experimental/regex>
+# endif
+#endif
+
// experimental headers
#if __cplusplus >= 201103L
#include <experimental/algorithm>
#include <experimental/map>
#include <experimental/memory_resource>
#include <experimental/propagate_const>
-#include <experimental/regex>
#include <experimental/simd>
#include <experimental/set>
#include <experimental/string>
//===----------------------------------------------------------------------===//
// UNSUPPORTED: c++03
+// UNSUPPORTED: libcpp-has-no-localization
// <experimental/regex>
// UNSUPPORTED: c++03, c++11
// UNSUPPORTED: no-exceptions
+// UNSUPPORTED: libcpp-has-no-localization
#include <cstddef>
#include <cstdint>
--- /dev/null
+# 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)
--- /dev/null
+# 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)
--- /dev/null
+# 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)
--- /dev/null
+# 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)
--- /dev/null
+# 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)
--- /dev/null
+# 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)
--- /dev/null
+# 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)
TEST_MACROS();
#include <cmath>
TEST_MACROS();
-#include <codecvt>
-TEST_MACROS();
#include <complex>
TEST_MACROS();
#include <complex.h>
TEST_MACROS();
#include <forward_list>
TEST_MACROS();
-#include <fstream>
-TEST_MACROS();
#include <functional>
TEST_MACROS();
#ifndef _LIBCPP_HAS_NO_THREADS
TEST_MACROS();
#include <inttypes.h>
TEST_MACROS();
-#include <iomanip>
-TEST_MACROS();
-#include <ios>
-TEST_MACROS();
#include <iosfwd>
TEST_MACROS();
-#include <iostream>
-TEST_MACROS();
-#include <istream>
-TEST_MACROS();
#include <iterator>
TEST_MACROS();
#include <limits>
TEST_MACROS();
#include <list>
TEST_MACROS();
-#include <locale>
-TEST_MACROS();
#include <locale.h>
TEST_MACROS();
#include <map>
TEST_MACROS();
#include <optional>
TEST_MACROS();
-#include <ostream>
-TEST_MACROS();
#include <queue>
TEST_MACROS();
#include <random>
TEST_MACROS();
#include <ratio>
TEST_MACROS();
-#include <regex>
-TEST_MACROS();
#include <scoped_allocator>
TEST_MACROS();
#include <set>
#endif
#include <span>
TEST_MACROS();
-#include <sstream>
-TEST_MACROS();
#include <stack>
TEST_MACROS();
#include <stdbool.h>
TEST_MACROS();
#include <stdlib.h>
TEST_MACROS();
-#include <streambuf>
-TEST_MACROS();
#include <string>
TEST_MACROS();
#include <string.h>
TEST_MACROS();
#include <string_view>
TEST_MACROS();
-#include <strstream>
-TEST_MACROS();
#include <system_error>
TEST_MACROS();
#include <tgmath.h>
#include <wctype.h>
TEST_MACROS();
+#ifndef _LIBCPP_HAS_NO_LOCALIZATION
+# include <codecvt>
+ TEST_MACROS();
+# include <fstream>
+ TEST_MACROS();
+# include <iomanip>
+ TEST_MACROS();
+# include <ios>
+ TEST_MACROS();
+# include <iostream>
+ TEST_MACROS();
+# include <istream>
+ TEST_MACROS();
+# include <locale>
+ TEST_MACROS();
+# include <ostream>
+ TEST_MACROS();
+# include <regex>
+ TEST_MACROS();
+# include <sstream>
+ TEST_MACROS();
+# include <streambuf>
+ TEST_MACROS();
+# include <strstream>
+ TEST_MACROS();
+# if __cplusplus >= 201103L
+# include <experimental/regex>
+ TEST_MACROS();
+# endif
+#endif
+
// experimental headers
#if __cplusplus >= 201103L
#include <experimental/algorithm>
TEST_MACROS();
#include <experimental/propagate_const>
TEST_MACROS();
-#include <experimental/regex>
-TEST_MACROS();
#include <experimental/set>
TEST_MACROS();
#include <experimental/string>
// are not modular
// XFAIL: LIBCXX-WINDOWS-FIXME
-// FIXME: The <atomic> 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
// are not modular
// XFAIL: LIBCXX-WINDOWS-FIXME
-// FIXME: The <atomic> 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
// are not modular
// XFAIL: LIBCXX-WINDOWS-FIXME
-// FIXME: The <atomic> 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 <cstdint> re-exports <stdint.h>
// are not modular
// XFAIL: LIBCXX-WINDOWS-FIXME
-// FIXME: The <atomic> 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
//
//===----------------------------------------------------------------------===//
-// FIXME: The <atomic> 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
// are not modular
// XFAIL: LIBCXX-WINDOWS-FIXME
-// FIXME: The <atomic> 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
#include <climits>
#include <clocale>
#include <cmath>
-#include <codecvt>
#include <compare>
#include <complex>
#include <complex.h>
#include <filesystem>
#include <float.h>
#include <forward_list>
-#include <fstream>
#include <functional>
#ifndef _LIBCPP_HAS_NO_THREADS
#include <future>
#endif
#include <initializer_list>
#include <inttypes.h>
-#include <iomanip>
-#include <ios>
#include <iosfwd>
-#include <iostream>
-#include <istream>
#include <iterator>
#include <limits>
#include <limits.h>
#include <list>
-#include <locale>
#include <locale.h>
#include <map>
#include <math.h>
#include <new>
#include <numeric>
#include <optional>
-#include <ostream>
#include <queue>
#include <random>
#include <ratio>
-#include <regex>
#include <scoped_allocator>
#include <set>
#include <setjmp.h>
#include <shared_mutex>
#endif
#include <span>
-#include <sstream>
#include <stack>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
-#include <streambuf>
#include <string>
#include <string.h>
#include <string_view>
-#include <strstream>
#include <system_error>
#include <tgmath.h>
#ifndef _LIBCPP_HAS_NO_THREADS
#include <wchar.h>
#include <wctype.h>
+#ifndef _LIBCPP_HAS_NO_LOCALIZATION
+# include <codecvt>
+# include <fstream>
+# include <iomanip>
+# include <ios>
+# include <iostream>
+# include <istream>
+# include <locale>
+# include <ostream>
+# include <regex>
+# include <sstream>
+# include <streambuf>
+# include <strstream>
+# if __cplusplus >= 201103L
+# include <experimental/regex>
+# endif
+#endif
+
// experimental headers
#if __cplusplus >= 201103L
#include <experimental/algorithm>
#include <experimental/map>
#include <experimental/memory_resource>
#include <experimental/propagate_const>
-#include <experimental/regex>
#include <experimental/simd>
#include <experimental/set>
#include <experimental/string>
--- /dev/null
+if 'libcpp-has-no-localization' in config.available_features:
+ config.unsupported = True
--- /dev/null
+if 'libcpp-has-no-localization' in config.available_features:
+ config.unsupported = True
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <system_error>
// class error_code
//===----------------------------------------------------------------------===//
// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: libcpp-has-no-localization
// <experimental/iterator>
//
//===----------------------------------------------------------------------===//
// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: libcpp-has-no-localization
// <experimental/iterator>
//
//===----------------------------------------------------------------------===//
// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: libcpp-has-no-localization
// <experimental/iterator>
//
//===----------------------------------------------------------------------===//
// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: libcpp-has-no-localization
// <experimental/iterator>
//
//===----------------------------------------------------------------------===//
// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: libcpp-has-no-localization
// <experimental/iterator>
//
//===----------------------------------------------------------------------===//
// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: libcpp-has-no-localization
// <experimental/iterator>
//
//===----------------------------------------------------------------------===//
// UNSUPPORTED: c++03
+// UNSUPPORTED: libcpp-has-no-localization
// <experimental/regex>
--- /dev/null
+# All non-trivial uses of iostreams require localization support
+if 'libcpp-has-no-localization' in config.available_features:
+ config.unsupported = True
// UNSUPPORTED: c++03
+// These tests require locale for non-char paths
+// UNSUPPORTED: libcpp-has-no-localization
+
// <filesystem>
// class path
// UNSUPPORTED: c++03
+// These tests require locale for non-char paths
+// UNSUPPORTED: libcpp-has-no-localization
+
// <filesystem>
// class path
// UNSUPPORTED: c++03
+// These tests require locale for non-char paths
+// UNSUPPORTED: libcpp-has-no-localization
+
// <filesystem>
// class path
// UNSUPPORTED: c++03
+// These tests require locale for non-char paths
+// UNSUPPORTED: libcpp-has-no-localization
+
// <filesystem>
// class path
// UNSUPPORTED: c++03
+// These tests require locale for non-char paths
+// UNSUPPORTED: libcpp-has-no-localization
+
// <filesystem>
// class path
// UNSUPPORTED: c++03
+// These tests require locale for non-char paths
+// UNSUPPORTED: libcpp-has-no-localization
+
// <filesystem>
// class path
// UNSUPPORTED: c++03
+// These tests require locale for non-char paths
+// UNSUPPORTED: libcpp-has-no-localization
+
// <filesystem>
// class path
// UNSUPPORTED: c++03
// REQUIRES: libc++
+// These tests require locale for non-char paths
+// UNSUPPORTED: libcpp-has-no-localization
+
// <filesystem>
// class path
//===----------------------------------------------------------------------===//
// UNSUPPORTED: c++03
+// UNSUPPORTED: libcpp-has-no-localization
// <filesystem>
--- /dev/null
+# All non-trivial uses of iostreams require localization support
+if 'libcpp-has-no-localization' in config.available_features:
+ config.unsupported = True
--- /dev/null
+# All non-trivial uses of iostreams require localization support
+if 'libcpp-has-no-localization' in config.available_features:
+ config.unsupported = True
--- /dev/null
+# All non-trivial uses of iostreams require localization support
+if 'libcpp-has-no-localization' in config.available_features:
+ config.unsupported = True
--- /dev/null
+# All non-trivial uses of iostreams require localization support
+if 'libcpp-has-no-localization' in config.available_features:
+ config.unsupported = True
--- /dev/null
+# All non-trivial uses of iostreams require localization support
+if 'libcpp-has-no-localization' in config.available_features:
+ config.unsupported = True
--- /dev/null
+# All non-trivial uses of iostreams require localization support
+if 'libcpp-has-no-localization' in config.available_features:
+ config.unsupported = True
--- /dev/null
+# All non-trivial uses of iostreams require localization support
+if 'libcpp-has-no-localization' in config.available_features:
+ config.unsupported = True
--- /dev/null
+# All non-trivial uses of iostreams require localization support
+if 'libcpp-has-no-localization' in config.available_features:
+ config.unsupported = True
--- /dev/null
+# stream iterators rely on the streams library, which requires localization
+if 'libcpp-has-no-localization' in config.available_features:
+ config.unsupported = True
// WARNING: This test was generated by generate_feature_test_macro_components.py
// and should not be edited manually.
+// UNSUPPORTED: libcpp-has-no-localization
+
// <iomanip>
// Test the feature test macros defined by <iomanip>
// WARNING: This test was generated by generate_feature_test_macro_components.py
// and should not be edited manually.
+// UNSUPPORTED: libcpp-has-no-localization
+
// <istream>
// Test the feature test macros defined by <istream>
// WARNING: This test was generated by generate_feature_test_macro_components.py
// and should not be edited manually.
+// UNSUPPORTED: libcpp-has-no-localization
+
// <locale>
// Test the feature test macros defined by <locale>
// WARNING: This test was generated by generate_feature_test_macro_components.py
// and should not be edited manually.
+// UNSUPPORTED: libcpp-has-no-localization
+
// <ostream>
// Test the feature test macros defined by <ostream>
// WARNING: This test was generated by generate_feature_test_macro_components.py
// and should not be edited manually.
+// UNSUPPORTED: libcpp-has-no-localization
+
// <regex>
// Test the feature test macros defined by <regex>
--- /dev/null
+# <locale> tests are obviously not supported when localization support is disabled
+if 'libcpp-has-no-localization' in config.available_features:
+ config.unsupported = True
// RUN: %{cxx} %t.tu1.o %t.tu2.o %{flags} %{link_flags} -o %t.exe
// RUN: %{exec} %t.exe
+// The functions checked below come from <iostream> & friends
+// UNSUPPORTED: libcpp-has-no-localization
+
#include <cassert>
#include <ios>
#include <istream>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <complex>
// template<class T, class charT, class traits>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <complex>
// template<class T, class charT, class traits>
// explicit discard_block_engine(result_type s = default_seed);
+// Serializing/deserializing the state of the RNG requires iostreams
+// UNSUPPORTED: libcpp-has-no-localization
+
#include <random>
#include <sstream>
#include <cassert>
// template<class Sseq> explicit discard_block_engine(Sseq& q);
+// Serializing/deserializing the state of the RNG requires iostreams
+// UNSUPPORTED: libcpp-has-no-localization
+
#include <random>
#include <sstream>
#include <cassert>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class Engine, size_t p, size_t r>
// explicit independent_bits_engine(result_type s = default_seed);
+// Serializing/deserializing the state of the RNG requires iostreams
+// UNSUPPORTED: libcpp-has-no-localization
+
#include <random>
#include <sstream>
#include <cassert>
// template<class Sseq> explicit independent_bits_engine(Sseq& q);
+// Serializing/deserializing the state of the RNG requires iostreams
+// UNSUPPORTED: libcpp-has-no-localization
+
#include <random>
#include <sstream>
#include <cassert>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class Engine, size_t w, class UIntType>
// explicit shuffle_order_engine(result_type s = default_seed);
+// Serializing/deserializing the state of the RNG requires iostreams
+// UNSUPPORTED: libcpp-has-no-localization
+
#include <random>
#include <sstream>
#include <cassert>
// template<class Sseq> explicit shuffle_order_engine(Sseq& q);
+// Serializing/deserializing the state of the RNG requires iostreams
+// UNSUPPORTED: libcpp-has-no-localization
+
#include <random>
#include <sstream>
#include <cassert>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class Engine, size_t k>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// class bernoulli_distribution
// Test the fix for https://llvm.org/PR44847.
+// Serializing/deserializing the state of the RNG requires iostreams
+// UNSUPPORTED: libcpp-has-no-localization
+
#include <random>
#include <numeric>
#include <vector>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class IntType = int>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class IntType = int>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class IntType = int>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class RealType = double>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class RealType = double>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class RealType = double>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class RealType = double>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class RealType = double>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class RealType = double>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class RealType = double>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class RealType = double>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class RealType = double>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class IntType = int>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class RealType = double>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class IntType = int>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class RealType = double>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class RealType = double>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class _IntType = int>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class RealType = double>
// explicit linear_congruential_engine(result_type s = default_seed);
+// Serializing/deserializing the state of the RNG requires iostreams
+// UNSUPPORTED: libcpp-has-no-localization
+
#include <random>
#include <sstream>
#include <cassert>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template <class UIntType, UIntType a, UIntType c, UIntType m>
// explicit mersenne_twister_engine(result_type s = default_seed);
+// Serializing/deserializing the state of the RNG requires iostreams
+// UNSUPPORTED: libcpp-has-no-localization
+
#include <random>
#include <sstream>
#include <cassert>
// template<class Sseq> explicit mersenne_twister_engine(Sseq& q);
+// Serializing/deserializing the state of the RNG requires iostreams
+// UNSUPPORTED: libcpp-has-no-localization
+
#include <random>
#include <sstream>
#include <cassert>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template <class UIntType, size_t w, size_t n, size_t m, size_t r,
// explicit subtract_with_carry_engine(result_type s = default_seed);
+// Serializing/deserializing the state of the RNG requires iostreams
+// UNSUPPORTED: libcpp-has-no-localization
+
#include <random>
#include <sstream>
#include <cassert>
// template<class Sseq> explicit subtract_with_carry_engine(Sseq& q);
+// Serializing/deserializing the state of the RNG requires iostreams
+// UNSUPPORTED: libcpp-has-no-localization
+
#include <random>
#include <sstream>
#include <cassert>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <random>
// template<class UIntType, size_t w, size_t s, size_t r>
--- /dev/null
+# Unfortunately, <regex> uses locales in regex_traits
+if 'libcpp-has-no-localization' in config.available_features:
+ config.unsupported = True
--- /dev/null
+# These std::string functions require iostreams, which requires localization
+if 'libcpp-has-no-localization' in config.available_features:
+ config.unsupported = True
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <string>
// template<class charT, class traits, class Allocator>
//===----------------------------------------------------------------------===//
// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: libcpp-has-no-localization
// <iomanip>
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-//
+
// UNSUPPORTED: libcpp-has-no-threads
+// UNSUPPORTED: libcpp-has-no-localization
// <thread>
//
//===----------------------------------------------------------------------===//
+// 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
// <memory>
// UNSUPPORTED: c++03
// Because we don't have a functioning decltype in C++03
+// UNSUPPORTED: libcpp-has-no-localization
+
// <memory>
// unique_ptr
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// <memory>
// shared_ptr
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// test:
// template <class charT, class traits, size_t N>
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: libcpp-has-no-localization
+
// test:
// template <class charT, class traits, size_t N>
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
+
// UNSUPPORTED: c++03, c++11, c++14, c++17
+// UNSUPPORTED: libcpp-has-no-localization
// XFAIL: *
// <chrono>
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:
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++
"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():
'_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 += [