Skip to content

Commit 7620011

Browse files
authored
[libc++] Do not guard inclusion of wchar.h with _LIBCPP_HAS_WIDE_CHARACTERS (#126924)
`mbstate_t` needs to be visible to libcpp, even when it is not providing wide character functionality (i.e. `_LIBCPP_HAS_WIDE_CHARACTERS` is turned off) and thus not using any of the C library's wide character functions. There are C libraries (such as newlib-nano/nanolib/picolibc) which do provide their definition of `mbstate_t` in `<wchar.h>` even though they do not come with wide character functions. Since there is a way to conditionally include the C library's `<wchar.h>` only if it exists, we should rely on the fact that if it exists, it will provide `mbstate_t`. Removing this guard will allow using libc++ on top of newlib-nano/picolibc while not breaking the cases where it is used on top of a C library which doesn't provide `<wchar.h>` (since it would then still go look for `<uchar.h>` or error out).
1 parent 8655378 commit 7620011

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

libcxx/include/__mbstate_t.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,12 @@
4343
# include <bits/types/mbstate_t.h> // works on most Unixes
4444
#elif __has_include(<sys/_types/_mbstate_t.h>)
4545
# include <sys/_types/_mbstate_t.h> // works on Darwin
46-
#elif _LIBCPP_HAS_WIDE_CHARACTERS && __has_include_next(<wchar.h>)
47-
# include_next <wchar.h> // fall back to the C standard provider of mbstate_t
46+
#elif __has_include_next(<wchar.h>)
47+
# include_next <wchar.h> // use the C standard provider of mbstate_t if present
4848
#elif __has_include_next(<uchar.h>)
49-
# include_next <uchar.h> // <uchar.h> is also required to make mbstate_t visible
49+
# include_next <uchar.h> // Try <uchar.h> in absence of <wchar.h> for mbstate_t
5050
#else
51-
# error "We don't know how to get the definition of mbstate_t without <wchar.h> on your platform."
51+
# error "We don't know how to get the definition of mbstate_t on your platform."
5252
#endif
5353

5454
#endif // _LIBCPP___MBSTATE_T_H

0 commit comments

Comments
 (0)