diff --git a/libcxx/include/CMakeLists.txt b/libcxx/include/CMakeLists.txt --- a/libcxx/include/CMakeLists.txt +++ b/libcxx/include/CMakeLists.txt @@ -222,8 +222,6 @@ __bit/popcount.h __bit/rotate.h __bit_reference - __bsd_locale_defaults.h - __bsd_locale_fallbacks.h __charconv/chars_format.h __charconv/from_chars_integral.h __charconv/from_chars_result.h @@ -439,6 +437,9 @@ __iterator/unreachable_sentinel.h __iterator/wrap_iter.h __locale + __locale_dir/locale_base_api/bsd_locale_defaults.h + __locale_dir/locale_base_api/bsd_locale_fallbacks.h + __locale_dir/locale_base_api/locale_guard.h __mbstate_t.h __memory/addressof.h __memory/align.h diff --git a/libcxx/include/__locale b/libcxx/include/__locale --- a/libcxx/include/__locale +++ b/libcxx/include/__locale @@ -13,9 +13,9 @@ #include <__availability> #include <__config> #include +#include #include #include -#include #include #include @@ -23,6 +23,10 @@ #include #include +#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS +# include +#endif + #if defined(_LIBCPP_MSVCRT_LIKE) # include <__support/win32/locale_win32.h> #elif defined(_AIX) || defined(__MVS__) @@ -53,63 +57,6 @@ _LIBCPP_BEGIN_NAMESPACE_STD -#if !defined(_LIBCPP_LOCALE__L_EXTENSIONS) -struct __libcpp_locale_guard { - _LIBCPP_INLINE_VISIBILITY - __libcpp_locale_guard(locale_t& __loc) : __old_loc_(uselocale(__loc)) {} - - _LIBCPP_INLINE_VISIBILITY - ~__libcpp_locale_guard() { - if (__old_loc_) - uselocale(__old_loc_); - } - - locale_t __old_loc_; -private: - __libcpp_locale_guard(__libcpp_locale_guard const&); - __libcpp_locale_guard& operator=(__libcpp_locale_guard const&); -}; -#elif defined(_LIBCPP_MSVCRT_LIKE) -struct __libcpp_locale_guard { - __libcpp_locale_guard(locale_t __l) : - __status(_configthreadlocale(_ENABLE_PER_THREAD_LOCALE)) { - // Setting the locale can be expensive even when the locale given is - // already the current locale, so do an explicit check to see if the - // current locale is already the one we want. - const char* __lc = __setlocale(nullptr); - // If every category is the same, the locale string will simply be the - // locale name, otherwise it will be a semicolon-separated string listing - // each category. In the second case, we know at least one category won't - // be what we want, so we only have to check the first case. - if (_VSTD::strcmp(__l.__get_locale(), __lc) != 0) { - __locale_all = _strdup(__lc); - if (__locale_all == nullptr) - __throw_bad_alloc(); - __setlocale(__l.__get_locale()); - } - } - ~__libcpp_locale_guard() { - // The CRT documentation doesn't explicitly say, but setlocale() does the - // right thing when given a semicolon-separated list of locale settings - // for the different categories in the same format as returned by - // setlocale(LC_ALL, nullptr). - if (__locale_all != nullptr) { - __setlocale(__locale_all); - free(__locale_all); - } - _configthreadlocale(__status); - } - static const char* __setlocale(const char* __locale) { - const char* __new_locale = setlocale(LC_ALL, __locale); - if (__new_locale == nullptr) - __throw_bad_alloc(); - return __new_locale; - } - int __status; - char* __locale_all = nullptr; -}; -#endif - class _LIBCPP_TYPE_VIS locale; template diff --git a/libcxx/include/__bsd_locale_defaults.h b/libcxx/include/__locale_dir/locale_base_api/bsd_locale_defaults.h rename from libcxx/include/__bsd_locale_defaults.h rename to libcxx/include/__locale_dir/locale_base_api/bsd_locale_defaults.h --- a/libcxx/include/__bsd_locale_defaults.h +++ b/libcxx/include/__locale_dir/locale_base_api/bsd_locale_defaults.h @@ -11,8 +11,8 @@ // we will define the mapping from an internal macro to the real BSD symbol. //===----------------------------------------------------------------------===// -#ifndef _LIBCPP___BSD_LOCALE_DEFAULTS_H -#define _LIBCPP___BSD_LOCALE_DEFAULTS_H +#ifndef _LIBCPP___LOCALE_LOCALE_BASE_API_BSD_LOCALE_DEFAULTS_H +#define _LIBCPP___LOCALE_LOCALE_BASE_API_BSD_LOCALE_DEFAULTS_H #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) # pragma GCC system_header @@ -33,4 +33,4 @@ #define __libcpp_asprintf_l(...) asprintf_l(__VA_ARGS__) #define __libcpp_sscanf_l(...) sscanf_l(__VA_ARGS__) -#endif // _LIBCPP___BSD_LOCALE_DEFAULTS_H +#endif // _LIBCPP___LOCALE_LOCALE_BASE_API_BSD_LOCALE_DEFAULTS_H diff --git a/libcxx/include/__bsd_locale_fallbacks.h b/libcxx/include/__locale_dir/locale_base_api/bsd_locale_fallbacks.h rename from libcxx/include/__bsd_locale_fallbacks.h rename to libcxx/include/__locale_dir/locale_base_api/bsd_locale_fallbacks.h --- a/libcxx/include/__bsd_locale_fallbacks.h +++ b/libcxx/include/__locale_dir/locale_base_api/bsd_locale_fallbacks.h @@ -10,12 +10,18 @@ // of those functions for non-BSD platforms. //===----------------------------------------------------------------------===// -#ifndef _LIBCPP___BSD_LOCALE_FALLBACKS_H -#define _LIBCPP___BSD_LOCALE_FALLBACKS_H +#ifndef _LIBCPP___LOCALE_LOCALE_BASE_API_BSD_LOCALE_FALLBACKS_H +#define _LIBCPP___LOCALE_LOCALE_BASE_API_BSD_LOCALE_FALLBACKS_H +#include <__locale_dir/locale_base_api/locale_guard.h> +#include #include #include +#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS +# include +#endif + #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) # pragma GCC system_header #endif @@ -139,4 +145,4 @@ _LIBCPP_END_NAMESPACE_STD -#endif // _LIBCPP___BSD_LOCALE_FALLBACKS_H +#endif // _LIBCPP___LOCALE_LOCALE_BASE_API_BSD_LOCALE_FALLBACKS_H diff --git a/libcxx/include/__locale_dir/locale_base_api/locale_guard.h b/libcxx/include/__locale_dir/locale_base_api/locale_guard.h new file mode 100644 --- /dev/null +++ b/libcxx/include/__locale_dir/locale_base_api/locale_guard.h @@ -0,0 +1,79 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef _LIBCPP___LOCALE_LOCALE_BASE_API_LOCALE_GUARD_H +#define _LIBCPP___LOCALE_LOCALE_BASE_API_LOCALE_GUARD_H + +#include <__config> +#include + +#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) +# pragma GCC system_header +#endif + +_LIBCPP_BEGIN_NAMESPACE_STD + +#if !defined(_LIBCPP_LOCALE__L_EXTENSIONS) +struct __libcpp_locale_guard { + _LIBCPP_INLINE_VISIBILITY __libcpp_locale_guard(locale_t& __loc) : __old_loc_(uselocale(__loc)) {} + + _LIBCPP_INLINE_VISIBILITY ~__libcpp_locale_guard() { + if (__old_loc_) + uselocale(__old_loc_); + } + + locale_t __old_loc_; + +private: + __libcpp_locale_guard(__libcpp_locale_guard const&); + __libcpp_locale_guard& operator=(__libcpp_locale_guard const&); +}; +#elif defined(_LIBCPP_MSVCRT_LIKE) +struct __libcpp_locale_guard { + __libcpp_locale_guard(locale_t __l) : + __status(_configthreadlocale(_ENABLE_PER_THREAD_LOCALE)) { + // Setting the locale can be expensive even when the locale given is + // already the current locale, so do an explicit check to see if the + // current locale is already the one we want. + const char* __lc = __setlocale(nullptr); + // If every category is the same, the locale string will simply be the + // locale name, otherwise it will be a semicolon-separated string listing + // each category. In the second case, we know at least one category won't + // be what we want, so we only have to check the first case. + if (_VSTD::strcmp(__l.__get_locale(), __lc) != 0) { + __locale_all = _strdup(__lc); + if (__locale_all == nullptr) + __throw_bad_alloc(); + __setlocale(__l.__get_locale()); + } + } + ~__libcpp_locale_guard() { + // The CRT documentation doesn't explicitly say, but setlocale() does the + // right thing when given a semicolon-separated list of locale settings + // for the different categories in the same format as returned by + // setlocale(LC_ALL, nullptr). + if (__locale_all != nullptr) { + __setlocale(__locale_all); + free(__locale_all); + } + _configthreadlocale(__status); + } + static const char* __setlocale(const char* __locale) { + const char* __new_locale = setlocale(LC_ALL, __locale); + if (__new_locale == nullptr) + __throw_bad_alloc(); + return __new_locale; + } + int __status; + char* __locale_all = nullptr; +}; +#endif + +_LIBCPP_END_NAMESPACE_STD + +#endif // _LIBCPP___LOCALE_LOCALE_BASE_API_LOCALE_GUARD_H diff --git a/libcxx/include/libcxx.imp b/libcxx/include/libcxx.imp --- a/libcxx/include/libcxx.imp +++ b/libcxx/include/libcxx.imp @@ -32,6 +32,7 @@ { include: [ "@<__fwd/.*>", "private", "", "public" ] }, { include: [ "@<__ios/.*>", "private", "", "public" ] }, { include: [ "@<__iterator/.*>", "private", "", "public" ] }, + { include: [ "@<__locale_dir/.*>", "private", "", "public" ] }, { include: [ "@<__memory/.*>", "private", "", "public" ] }, { include: [ "@<__memory_resource/.*>", "private", "", "public" ] }, { include: [ "@<__mutex/.*>", "private", "", "public" ] }, diff --git a/libcxx/include/locale b/libcxx/include/locale --- a/libcxx/include/locale +++ b/libcxx/include/locale @@ -225,9 +225,9 @@ #endif #ifdef _LIBCPP_LOCALE__L_EXTENSIONS -#include <__bsd_locale_defaults.h> +# include <__locale_dir/locale_base_api/bsd_locale_defaults.h> #else -#include <__bsd_locale_fallbacks.h> +# include <__locale_dir/locale_base_api/bsd_locale_fallbacks.h> #endif #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) diff --git a/libcxx/src/iostream.cpp b/libcxx/src/iostream.cpp --- a/libcxx/src/iostream.cpp +++ b/libcxx/src/iostream.cpp @@ -11,6 +11,10 @@ #include #include +#ifdef _LIBCPP_MSVCRT_LIKE +# include <__locale_dir/locale_base_api/locale_guard.h> +#endif + #define _str(s) #s #define str(s) _str(s) #define _LIBCPP_ABI_NAMESPACE_STR str(_LIBCPP_ABI_NAMESPACE) diff --git a/libcxx/src/support/win32/locale_win32.cpp b/libcxx/src/support/win32/locale_win32.cpp --- a/libcxx/src/support/win32/locale_win32.cpp +++ b/libcxx/src/support/win32/locale_win32.cpp @@ -11,6 +11,8 @@ #include #include +#include <__locale_dir/locale_base_api/locale_guard.h> + int __libcpp_vasprintf(char **sptr, const char *__restrict fmt, va_list ap); using std::__libcpp_locale_guard; diff --git a/libcxx/test/libcxx/lint/lint_modulemap.sh.py b/libcxx/test/libcxx/lint/lint_modulemap.sh.py --- a/libcxx/test/libcxx/lint/lint_modulemap.sh.py +++ b/libcxx/test/libcxx/lint/lint_modulemap.sh.py @@ -23,7 +23,7 @@ if re.match(r'^\s*module (\w+)\s+[{] private header "\1(.h)?"\s+export [*] [}]', line): # It's a top-level private header, such as <__bit_reference>. pass - elif re.match(r'^\s*module (\w+)\s+[{] private header "__\w+/\1[.]h" [}]', line): + elif re.match(r'^\s*module (\w+)\s+[{] private (textual )?header "__(\w+/)*\1[.]h" [}]', line): # It's a private submodule, such as <__utility/swap.h>. pass elif re.match(r'^\s*module (\w+)_fwd\s+[{] private header "__fwd/\1[.]h" [}]', line): diff --git a/libcxx/test/libcxx/private_headers.verify.cpp b/libcxx/test/libcxx/private_headers.verify.cpp --- a/libcxx/test/libcxx/private_headers.verify.cpp +++ b/libcxx/test/libcxx/private_headers.verify.cpp @@ -23,6 +23,10 @@ if header.startswith('__support'): continue + # Skip the locale API headers, since they are platform-specific and thus inherently non-modular + if 'locale_base_api' in header: + continue + print("{ifdef}#{indent}include <{header}> // {expected_error}@*:* {{{{use of private header from outside its module: '{header}'}}}}{endif}".format( ifdef='#if ' + header_restrictions[header] + '\n' if header in header_restrictions else '', indent=' ' if header in header_restrictions else '', diff --git a/libcxx/test/libcxx/transitive_includes/cxx03.csv b/libcxx/test/libcxx/transitive_includes/cxx03.csv --- a/libcxx/test/libcxx/transitive_includes/cxx03.csv +++ b/libcxx/test/libcxx/transitive_includes/cxx03.csv @@ -127,11 +127,13 @@ cmath version codecvt atomic codecvt cctype +codecvt clocale codecvt concepts codecvt cstddef codecvt cstdint codecvt cstdlib codecvt cstring +codecvt cwchar codecvt initializer_list codecvt iosfwd codecvt limits @@ -354,12 +356,14 @@ forward_list version fstream atomic fstream cctype +fstream clocale fstream concepts fstream cstddef fstream cstdint fstream cstdio fstream cstdlib fstream cstring +fstream cwchar fstream filesystem fstream initializer_list fstream iosfwd @@ -420,11 +424,13 @@ iomanip version ios atomic ios cctype +ios clocale ios concepts ios cstddef ios cstdint ios cstdlib ios cstring +ios cwchar ios initializer_list ios iosfwd ios limits @@ -496,6 +502,7 @@ locale atomic locale cctype locale cerrno +locale clocale locale concepts locale cstdarg locale cstddef @@ -504,6 +511,7 @@ locale cstdlib locale cstring locale ctime +locale cwchar locale initializer_list locale ios locale iosfwd @@ -681,12 +689,14 @@ ratio version regex atomic regex cctype +regex clocale regex compare regex concepts regex cstddef regex cstdint regex cstdlib regex cstring +regex cwchar regex deque regex initializer_list regex iosfwd diff --git a/libcxx/test/libcxx/transitive_includes/cxx11.csv b/libcxx/test/libcxx/transitive_includes/cxx11.csv --- a/libcxx/test/libcxx/transitive_includes/cxx11.csv +++ b/libcxx/test/libcxx/transitive_includes/cxx11.csv @@ -127,11 +127,13 @@ cmath version codecvt atomic codecvt cctype +codecvt clocale codecvt concepts codecvt cstddef codecvt cstdint codecvt cstdlib codecvt cstring +codecvt cwchar codecvt initializer_list codecvt iosfwd codecvt limits @@ -354,12 +356,14 @@ forward_list version fstream atomic fstream cctype +fstream clocale fstream concepts fstream cstddef fstream cstdint fstream cstdio fstream cstdlib fstream cstring +fstream cwchar fstream filesystem fstream initializer_list fstream iosfwd @@ -420,11 +424,13 @@ iomanip version ios atomic ios cctype +ios clocale ios concepts ios cstddef ios cstdint ios cstdlib ios cstring +ios cwchar ios initializer_list ios iosfwd ios limits @@ -496,6 +502,7 @@ locale atomic locale cctype locale cerrno +locale clocale locale concepts locale cstdarg locale cstddef @@ -504,6 +511,7 @@ locale cstdlib locale cstring locale ctime +locale cwchar locale initializer_list locale ios locale iosfwd @@ -682,12 +690,14 @@ ratio version regex atomic regex cctype +regex clocale regex compare regex concepts regex cstddef regex cstdint regex cstdlib regex cstring +regex cwchar regex deque regex initializer_list regex iosfwd diff --git a/libcxx/test/libcxx/transitive_includes/cxx14.csv b/libcxx/test/libcxx/transitive_includes/cxx14.csv --- a/libcxx/test/libcxx/transitive_includes/cxx14.csv +++ b/libcxx/test/libcxx/transitive_includes/cxx14.csv @@ -127,11 +127,13 @@ cmath version codecvt atomic codecvt cctype +codecvt clocale codecvt concepts codecvt cstddef codecvt cstdint codecvt cstdlib codecvt cstring +codecvt cwchar codecvt initializer_list codecvt iosfwd codecvt limits @@ -356,12 +358,14 @@ forward_list version fstream atomic fstream cctype +fstream clocale fstream concepts fstream cstddef fstream cstdint fstream cstdio fstream cstdlib fstream cstring +fstream cwchar fstream filesystem fstream initializer_list fstream iosfwd @@ -422,11 +426,13 @@ iomanip version ios atomic ios cctype +ios clocale ios concepts ios cstddef ios cstdint ios cstdlib ios cstring +ios cwchar ios initializer_list ios iosfwd ios limits @@ -498,6 +504,7 @@ locale atomic locale cctype locale cerrno +locale clocale locale concepts locale cstdarg locale cstddef @@ -506,6 +513,7 @@ locale cstdlib locale cstring locale ctime +locale cwchar locale initializer_list locale ios locale iosfwd @@ -684,12 +692,14 @@ ratio version regex atomic regex cctype +regex clocale regex compare regex concepts regex cstddef regex cstdint regex cstdlib regex cstring +regex cwchar regex deque regex initializer_list regex iosfwd diff --git a/libcxx/test/libcxx/transitive_includes/cxx17.csv b/libcxx/test/libcxx/transitive_includes/cxx17.csv --- a/libcxx/test/libcxx/transitive_includes/cxx17.csv +++ b/libcxx/test/libcxx/transitive_includes/cxx17.csv @@ -127,11 +127,13 @@ cmath version codecvt atomic codecvt cctype +codecvt clocale codecvt concepts codecvt cstddef codecvt cstdint codecvt cstdlib codecvt cstring +codecvt cwchar codecvt initializer_list codecvt iosfwd codecvt limits @@ -356,12 +358,14 @@ forward_list version fstream atomic fstream cctype +fstream clocale fstream concepts fstream cstddef fstream cstdint fstream cstdio fstream cstdlib fstream cstring +fstream cwchar fstream filesystem fstream initializer_list fstream iosfwd @@ -422,11 +426,13 @@ iomanip version ios atomic ios cctype +ios clocale ios concepts ios cstddef ios cstdint ios cstdlib ios cstring +ios cwchar ios initializer_list ios iosfwd ios limits @@ -498,6 +504,7 @@ locale atomic locale cctype locale cerrno +locale clocale locale concepts locale cstdarg locale cstddef @@ -506,6 +513,7 @@ locale cstdlib locale cstring locale ctime +locale cwchar locale initializer_list locale ios locale iosfwd @@ -684,12 +692,14 @@ ratio version regex atomic regex cctype +regex clocale regex compare regex concepts regex cstddef regex cstdint regex cstdlib regex cstring +regex cwchar regex deque regex initializer_list regex iosfwd diff --git a/libcxx/test/libcxx/transitive_includes/cxx20.csv b/libcxx/test/libcxx/transitive_includes/cxx20.csv --- a/libcxx/test/libcxx/transitive_includes/cxx20.csv +++ b/libcxx/test/libcxx/transitive_includes/cxx20.csv @@ -134,11 +134,13 @@ cmath version codecvt atomic codecvt cctype +codecvt clocale codecvt concepts codecvt cstddef codecvt cstdint codecvt cstdlib codecvt cstring +codecvt cwchar codecvt initializer_list codecvt iosfwd codecvt limits @@ -363,12 +365,14 @@ forward_list version fstream atomic fstream cctype +fstream clocale fstream concepts fstream cstddef fstream cstdint fstream cstdio fstream cstdlib fstream cstring +fstream cwchar fstream filesystem fstream initializer_list fstream iosfwd @@ -428,11 +432,13 @@ iomanip version ios atomic ios cctype +ios clocale ios concepts ios cstddef ios cstdint ios cstdlib ios cstring +ios cwchar ios initializer_list ios iosfwd ios limits @@ -504,6 +510,7 @@ locale atomic locale cctype locale cerrno +locale clocale locale concepts locale cstdarg locale cstddef @@ -512,6 +519,7 @@ locale cstdlib locale cstring locale ctime +locale cwchar locale initializer_list locale ios locale iosfwd @@ -690,12 +698,14 @@ ratio version regex atomic regex cctype +regex clocale regex compare regex concepts regex cstddef regex cstdint regex cstdlib regex cstring +regex cwchar regex deque regex initializer_list regex iosfwd diff --git a/libcxx/test/libcxx/transitive_includes/cxx2b.csv b/libcxx/test/libcxx/transitive_includes/cxx2b.csv --- a/libcxx/test/libcxx/transitive_includes/cxx2b.csv +++ b/libcxx/test/libcxx/transitive_includes/cxx2b.csv @@ -84,10 +84,12 @@ cinttypes cstdint cmath version codecvt cctype +codecvt clocale codecvt cstddef codecvt cstdint codecvt cstdlib codecvt cstring +codecvt cwchar codecvt mutex codecvt string codecvt version @@ -242,11 +244,13 @@ forward_list tuple forward_list version fstream cctype +fstream clocale fstream cstddef fstream cstdint fstream cstdio fstream cstdlib fstream cstring +fstream cwchar fstream filesystem fstream initializer_list fstream istream @@ -290,10 +294,12 @@ iomanip istream iomanip version ios cctype +ios clocale ios cstddef ios cstdint ios cstdlib ios cstring +ios cwchar ios iosfwd ios mutex ios string @@ -337,12 +343,14 @@ list version locale cctype locale cerrno +locale clocale locale cstddef locale cstdint locale cstdio locale cstdlib locale cstring locale ctime +locale cwchar locale initializer_list locale ios locale iosfwd @@ -460,11 +468,13 @@ ratio cstdint ratio version regex cctype +regex clocale regex compare regex cstddef regex cstdint regex cstdlib regex cstring +regex cwchar regex deque regex initializer_list regex limits diff --git a/libcxx/utils/data/ignore_format.txt b/libcxx/utils/data/ignore_format.txt --- a/libcxx/utils/data/ignore_format.txt +++ b/libcxx/utils/data/ignore_format.txt @@ -236,8 +236,6 @@ libcxx/include/__bit_reference libcxx/include/__bit/rotate.h libcxx/include/bitset -libcxx/include/__bsd_locale_defaults.h -libcxx/include/__bsd_locale_fallbacks.h libcxx/include/cctype libcxx/include/chrono libcxx/include/__chrono/calendar.h @@ -455,6 +453,9 @@ libcxx/include/list libcxx/include/__locale libcxx/include/locale +libcxx/include/__locale_dir/locale_base_api/bsd_locale_defaults.h +libcxx/include/__locale_dir/locale_base_api/bsd_locale_fallbacks.h +libcxx/include/__locale_dir/locale_base_api/locale_guard.h libcxx/include/locale.h libcxx/include/map libcxx/include/math.h diff --git a/libcxx/utils/generate_header_tests.py b/libcxx/utils/generate_header_tests.py --- a/libcxx/utils/generate_header_tests.py +++ b/libcxx/utils/generate_header_tests.py @@ -64,7 +64,7 @@ } private_headers_still_public_in_modules = [ - '__assert', '__bsd_locale_defaults.h', '__bsd_locale_fallbacks.h', '__config', + '__assert', '__config', '__config_site.in', '__debug', '__hash_table', '__threading_support', '__tree', '__undef_macros', '__verbose_abort' ] diff --git a/libcxx/utils/generate_iwyu_mapping.py b/libcxx/utils/generate_iwyu_mapping.py --- a/libcxx/utils/generate_iwyu_mapping.py +++ b/libcxx/utils/generate_iwyu_mapping.py @@ -30,7 +30,7 @@ c_headers.append(i.name) result = [] - temporary_mappings = {} + temporary_mappings = {'__locale_dir' : 'locale'} for i in detail_directories: public_header = temporary_mappings.get(i, i.lstrip('_')) result.append(f'{generate(f"@<{i}/.*>", public_header)},') @@ -41,8 +41,6 @@ elif i == '__availability': continue elif i == '__bit_reference': continue elif i == '__bits': public = ['bits'] - elif i == '__bsd_locale_defaults.h': continue - elif i == '__bsd_locale_fallbacks.h': continue elif i == '__config_site.in': continue elif i == '__config': continue elif i == '__debug': continue