diff options
author | Shoaib Meenai <smeenai@fb.com> | 2016-09-15 18:36:13 +0000 |
---|---|---|
committer | Shoaib Meenai <smeenai@fb.com> | 2016-09-15 18:36:13 +0000 |
commit | f6eea04cd134ebc149017f68d5b33b73113bdd0c (patch) | |
tree | e9c968735f506d3e63dff9748867ca6d835c0d08 /libcxx/include/support/win32 | |
parent | 06a67ba57d438066b3c679d5ee52dbe90ea8a605 (diff) | |
download | bcm5719-llvm-f6eea04cd134ebc149017f68d5b33b73113bdd0c.tar.gz bcm5719-llvm-f6eea04cd134ebc149017f68d5b33b73113bdd0c.zip |
[libc++] Avoid <memory> include in locale_win32.h
When `_LIBCPP_NO_EXCEPTIONS` is defined, we end up with compile errors
when targeting MSVCRT:
* Code includes `<new>`
* `<new>` includes `<cstdlib>` in order to get `abort`
* `<cstdlib>` includes `<stdlib.h>`, _before_ the `using ::abort`
* `<stdlib.h>` includes `locale_win32.h`
* `locale_win32.h` includes `<memory>`
* `<memory>` includes `<stdexcept>`
* `<stdexcept>` includes `<cstdlib` for `abort`, but that inclusion gets
(correctly) ignored because of header guards
* `<stdexcept>` references `_VSTD::abort`, which isn't declared
The easiest solution is to make `locale_win32.h` not include `<memory>`,
by removing the use of `unique_ptr` and manually restoring the locale
instead.
Differential Revision: https://reviews.llvm.org/D24374
llvm-svn: 281641
Diffstat (limited to 'libcxx/include/support/win32')
-rw-r--r-- | libcxx/include/support/win32/locale_win32.h | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/libcxx/include/support/win32/locale_win32.h b/libcxx/include/support/win32/locale_win32.h index 7f3710ecc18..4cb6d560095 100644 --- a/libcxx/include/support/win32/locale_win32.h +++ b/libcxx/include/support/win32/locale_win32.h @@ -17,7 +17,6 @@ extern "C" unsigned short __declspec(dllimport) _ctype[]; #include "support/win32/support.h" #include "support/win32/locale_mgmt_win32.h" #include <stdio.h> -#include <memory> lconv *localeconv_l( locale_t loc ); size_t mbrlen_l( const char *__restrict s, size_t n, @@ -34,13 +33,10 @@ size_t wcsnrtombs_l( char *__restrict dst, const wchar_t **__restrict src, size_t nwc, size_t len, mbstate_t *__restrict ps, locale_t loc); wint_t btowc_l( int c, locale_t loc ); int wctob_l( wint_t c, locale_t loc ); -typedef _VSTD::remove_pointer<locale_t>::type __locale_struct; -typedef _VSTD::unique_ptr<__locale_struct, decltype(&uselocale)> __locale_raii; inline _LIBCPP_ALWAYS_INLINE decltype(MB_CUR_MAX) MB_CUR_MAX_L( locale_t __l ) { - __locale_raii __current( uselocale(__l), uselocale ); - return MB_CUR_MAX; + return ___mb_cur_max_l_func(__l); } // the *_l functions are prefixed on Windows, only available for msvcr80+, VS2005+ |