From 675401e04c0687693c3b869410ed575387e7d8d6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Martin=20Storsj=C3=B6?= Date: Tue, 23 Mar 2021 22:02:26 +0200 Subject: [PATCH] [libcxx] Avoid pulling in xlocinfo.h in public headers Including xlocinfo.h is a bit of a layering violation; locale.h is the C library header we should use, while xlocinfo.h is essentially part of the MS C++ library. Including xlocinfo.h brings in yvals.h, which brings in yvals_core.h, which defines the MS STL's version support macros, overriding what libc++'s had defined. Instead just include locale.h, and provide the few defines we need for locale categories manually. Differential Revision: https://reviews.llvm.org/D99213 --- libcxx/include/__support/win32/locale_win32.h | 21 ++++++++++++++++++- .../complex.version.pass.cpp | 2 -- .../filesystem.version.pass.cpp | 1 - .../istream.version.pass.cpp | 1 - .../locale.version.pass.cpp | 1 - .../ostream.version.pass.cpp | 1 - 6 files changed, 20 insertions(+), 7 deletions(-) diff --git a/libcxx/include/__support/win32/locale_win32.h b/libcxx/include/__support/win32/locale_win32.h index d32a7a8ad304..3c5c87ae592d 100644 --- a/libcxx/include/__support/win32/locale_win32.h +++ b/libcxx/include/__support/win32/locale_win32.h @@ -12,9 +12,28 @@ #include <__config> #include -#include // _locale_t +#include // _locale_t #include <__nullptr> +#define _X_ALL LC_ALL +#define _X_COLLATE LC_COLLATE +#define _X_CTYPE LC_CTYPE +#define _X_MONETARY LC_MONETARY +#define _X_NUMERIC LC_NUMERIC +#define _X_TIME LC_TIME +#define _X_MAX LC_MAX +#define _X_MESSAGES 6 +#define _NCAT (_X_MESSAGES + 1) + +#define _CATMASK(n) ((1 << (n)) >> 1) +#define _M_COLLATE _CATMASK(_X_COLLATE) +#define _M_CTYPE _CATMASK(_X_CTYPE) +#define _M_MONETARY _CATMASK(_X_MONETARY) +#define _M_NUMERIC _CATMASK(_X_NUMERIC) +#define _M_TIME _CATMASK(_X_TIME) +#define _M_MESSAGES _CATMASK(_X_MESSAGES) +#define _M_ALL (_CATMASK(_NCAT) - 1) + #define LC_COLLATE_MASK _M_COLLATE #define LC_CTYPE_MASK _M_CTYPE #define LC_MONETARY_MASK _M_MONETARY diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/complex.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/complex.version.pass.cpp index a590f429fb00..c48a1894eada 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/complex.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/complex.version.pass.cpp @@ -13,8 +13,6 @@ // -// XFAIL: LIBCXX-WINDOWS-FIXME - // Test the feature test macros defined by /* Constant Value diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/filesystem.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/filesystem.version.pass.cpp index d28fa4cecda6..c361569cb1d6 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/filesystem.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/filesystem.version.pass.cpp @@ -12,7 +12,6 @@ // clang-format off // UNSUPPORTED: libcpp-has-no-filesystem-library -// XFAIL: LIBCXX-WINDOWS-FIXME // 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 index 1c0d3255d13d..9ea01ebe06df 100644 --- 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 @@ -12,7 +12,6 @@ // clang-format off // UNSUPPORTED: libcpp-has-no-localization -// XFAIL: LIBCXX-WINDOWS-FIXME // 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 index 20065fe19acb..f9620763c762 100644 --- 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 @@ -12,7 +12,6 @@ // clang-format off // UNSUPPORTED: libcpp-has-no-localization -// XFAIL: LIBCXX-WINDOWS-FIXME // 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 index 6b729bc09eb0..586cd8ec6d57 100644 --- 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 @@ -12,7 +12,6 @@ // clang-format off // UNSUPPORTED: libcpp-has-no-localization -// XFAIL: LIBCXX-WINDOWS-FIXME // -- 2.34.1