From 04a75f54a11f1f2640a211a81120966c7a24d05b Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Tue, 18 Jun 2024 14:22:33 -0400 Subject: [libc++] Properly define _LIBCPP_HAS_NO_UNICODE in __config_site (#95138) Fixes #93638 Co-authored-by: Mark de Wever --- libcxx/include/__config_site.in | 1 + libcxx/include/__format/parser_std_format_spec.h | 4 ++-- .../ostream.formatted.print/vprint_unicode.pass.cpp | 1 + .../input.output/iostream.format/print.fun/transcoding.pass.cpp | 1 + .../iostream.format/print.fun/vprint_unicode_posix.pass.cpp | 1 + .../iostream.format/print.fun/vprint_unicode_windows.pass.cpp | 1 + .../test/libcxx/utilities/format/format.functions/ascii.pass.cpp | 3 +-- .../format/format.functions/escaped_output.ascii.pass.cpp | 3 +-- .../format.string.std/extended_grapheme_cluster.pass.cpp | 1 + .../ostream.formatted.print/locale-specific_form.pass.cpp | 2 ++ .../ostream.formatted.print/vprint_unicode.pass.cpp | 1 + .../iostream.format/print.fun/no_file_description.pass.cpp | 2 ++ .../input.output/iostream.format/print.fun/vprint_unicode.sh.cpp | 1 + .../format.formatter.spec/formatter.char.fsigned-char.pass.cpp | 8 +++++--- 14 files changed, 21 insertions(+), 9 deletions(-) diff --git a/libcxx/include/__config_site.in b/libcxx/include/__config_site.in index 89a1460..6702214 100644 --- a/libcxx/include/__config_site.in +++ b/libcxx/include/__config_site.in @@ -26,6 +26,7 @@ #cmakedefine _LIBCPP_HAS_NO_FILESYSTEM #cmakedefine _LIBCPP_HAS_NO_RANDOM_DEVICE #cmakedefine _LIBCPP_HAS_NO_LOCALIZATION +#cmakedefine _LIBCPP_HAS_NO_UNICODE #cmakedefine _LIBCPP_HAS_NO_WIDE_CHARACTERS #cmakedefine _LIBCPP_HAS_NO_STD_MODULES #cmakedefine _LIBCPP_HAS_NO_TIME_ZONE_DATABASE diff --git a/libcxx/include/__format/parser_std_format_spec.h b/libcxx/include/__format/parser_std_format_spec.h index 9818f37..150bdde 100644 --- a/libcxx/include/__format/parser_std_format_spec.h +++ b/libcxx/include/__format/parser_std_format_spec.h @@ -1155,8 +1155,8 @@ __estimate_column_width(basic_string_view<_CharT> __str, size_t __maximum, __col // When Unicode isn't supported assume ASCII and every code unit is one code // point. In ASCII the estimated column width is always one. Thus there's no // need for rounding. - size_t __width_ = std::min(__str.size(), __maximum); - return {__width_, __str.begin() + __width_}; + size_t __width = std::min(__str.size(), __maximum); + return {__width, __str.begin() + __width}; } # endif // !defined(_LIBCPP_HAS_NO_UNICODE) diff --git a/libcxx/test/libcxx/input.output/iostream.format/output.streams/ostream.formatted/ostream.formatted.print/vprint_unicode.pass.cpp b/libcxx/test/libcxx/input.output/iostream.format/output.streams/ostream.formatted/ostream.formatted.print/vprint_unicode.pass.cpp index 572c6ca..9c801f5 100644 --- a/libcxx/test/libcxx/input.output/iostream.format/output.streams/ostream.formatted/ostream.formatted.print/vprint_unicode.pass.cpp +++ b/libcxx/test/libcxx/input.output/iostream.format/output.streams/ostream.formatted/ostream.formatted.print/vprint_unicode.pass.cpp @@ -7,6 +7,7 @@ // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20 // UNSUPPORTED: no-filesystem, no-rtti +// UNSUPPORTED: libcpp-has-no-unicode // UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME // XFAIL: availability-fp_to_chars-missing diff --git a/libcxx/test/libcxx/input.output/iostream.format/print.fun/transcoding.pass.cpp b/libcxx/test/libcxx/input.output/iostream.format/print.fun/transcoding.pass.cpp index 168fa40..ab52489 100644 --- a/libcxx/test/libcxx/input.output/iostream.format/print.fun/transcoding.pass.cpp +++ b/libcxx/test/libcxx/input.output/iostream.format/print.fun/transcoding.pass.cpp @@ -7,6 +7,7 @@ // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20 // UNSUPPORTED: no-filesystem +// UNSUPPORTED: libcpp-has-no-unicode // UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME // ADDITIONAL_COMPILE_FLAGS(has-fconstexpr-steps): -fconstexpr-steps=2000000 diff --git a/libcxx/test/libcxx/input.output/iostream.format/print.fun/vprint_unicode_posix.pass.cpp b/libcxx/test/libcxx/input.output/iostream.format/print.fun/vprint_unicode_posix.pass.cpp index 9a50770..fd570c2 100644 --- a/libcxx/test/libcxx/input.output/iostream.format/print.fun/vprint_unicode_posix.pass.cpp +++ b/libcxx/test/libcxx/input.output/iostream.format/print.fun/vprint_unicode_posix.pass.cpp @@ -7,6 +7,7 @@ // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20 // UNSUPPORTED: no-filesystem +// UNSUPPORTED: libcpp-has-no-unicode // UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME // XFAIL: availability-fp_to_chars-missing diff --git a/libcxx/test/libcxx/input.output/iostream.format/print.fun/vprint_unicode_windows.pass.cpp b/libcxx/test/libcxx/input.output/iostream.format/print.fun/vprint_unicode_windows.pass.cpp index 2dd7605..7d17662 100644 --- a/libcxx/test/libcxx/input.output/iostream.format/print.fun/vprint_unicode_windows.pass.cpp +++ b/libcxx/test/libcxx/input.output/iostream.format/print.fun/vprint_unicode_windows.pass.cpp @@ -8,6 +8,7 @@ // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20 // UNSUPPORTED: no-filesystem // UNSUPPORTED: no-wide-characters +// UNSUPPORTED: libcpp-has-no-unicode // UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME // Clang modules do not work with the definiton of _LIBCPP_TESTING_PRINT_WRITE_TO_WINDOWS_CONSOLE_FUNCTION diff --git a/libcxx/test/libcxx/utilities/format/format.functions/ascii.pass.cpp b/libcxx/test/libcxx/utilities/format/format.functions/ascii.pass.cpp index d4a55dd..dd6b36e 100644 --- a/libcxx/test/libcxx/utilities/format/format.functions/ascii.pass.cpp +++ b/libcxx/test/libcxx/utilities/format/format.functions/ascii.pass.cpp @@ -8,8 +8,7 @@ // UNSUPPORTED: c++03, c++11, c++14, c++17 // UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME -// Force unicode to be disabled. -// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_HAS_NO_UNICODE +// REQUIRES: libcpp-has-no-unicode // TODO FMT This test should not require std::to_chars(floating-point) // XFAIL: availability-fp_to_chars-missing diff --git a/libcxx/test/libcxx/utilities/format/format.functions/escaped_output.ascii.pass.cpp b/libcxx/test/libcxx/utilities/format/format.functions/escaped_output.ascii.pass.cpp index 3235277..d43d4de 100644 --- a/libcxx/test/libcxx/utilities/format/format.functions/escaped_output.ascii.pass.cpp +++ b/libcxx/test/libcxx/utilities/format/format.functions/escaped_output.ascii.pass.cpp @@ -11,8 +11,7 @@ // TODO FMT This test should not require std::to_chars(floating-point) // XFAIL: availability-fp_to_chars-missing -// Force unicode to be disabled. -// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_HAS_NO_UNICODE +// REQUIRES: libcpp-has-no-unicode // diff --git a/libcxx/test/libcxx/utilities/format/format.string/format.string.std/extended_grapheme_cluster.pass.cpp b/libcxx/test/libcxx/utilities/format/format.string/format.string.std/extended_grapheme_cluster.pass.cpp index c1fdd1f..f69a995 100644 --- a/libcxx/test/libcxx/utilities/format/format.string/format.string.std/extended_grapheme_cluster.pass.cpp +++ b/libcxx/test/libcxx/utilities/format/format.string/format.string.std/extended_grapheme_cluster.pass.cpp @@ -6,6 +6,7 @@ //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11, c++14, c++17 +// UNSUPPORTED: libcpp-has-no-unicode // UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME // diff --git a/libcxx/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.formatted.print/locale-specific_form.pass.cpp b/libcxx/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.formatted.print/locale-specific_form.pass.cpp index 2e19e38..57023b7 100644 --- a/libcxx/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.formatted.print/locale-specific_form.pass.cpp +++ b/libcxx/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.formatted.print/locale-specific_form.pass.cpp @@ -66,6 +66,7 @@ test(std::stringstream& stream, std::string expected, test_format_string buffer{0}; FILE* file = fmemopen(buffer.data(), buffer.size(), "wb"); @@ -92,6 +93,7 @@ static void test_vprint_unicode() { assert(pos > 0); assert(std::string_view(buffer.data(), pos) == "hello world!"); +#endif // TEST_HAS_NO_UNICODE } static void test_vprint_nonunicode() { diff --git a/libcxx/test/std/input.output/iostream.format/print.fun/vprint_unicode.sh.cpp b/libcxx/test/std/input.output/iostream.format/print.fun/vprint_unicode.sh.cpp index 198e71b..e32a794 100644 --- a/libcxx/test/std/input.output/iostream.format/print.fun/vprint_unicode.sh.cpp +++ b/libcxx/test/std/input.output/iostream.format/print.fun/vprint_unicode.sh.cpp @@ -7,6 +7,7 @@ // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20 // UNSUPPORTED: no-filesystem +// UNSUPPORTED: libcpp-has-no-unicode // UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME // XFAIL: availability-fp_to_chars-missing diff --git a/libcxx/test/std/utilities/format/format.formatter/format.formatter.spec/formatter.char.fsigned-char.pass.cpp b/libcxx/test/std/utilities/format/format.formatter/format.formatter.spec/formatter.char.fsigned-char.pass.cpp index d0da8d6..f3d587e1 100644 --- a/libcxx/test/std/utilities/format/format.formatter/format.formatter.spec/formatter.char.fsigned-char.pass.cpp +++ b/libcxx/test/std/utilities/format/format.formatter/format.formatter.spec/formatter.char.fsigned-char.pass.cpp @@ -71,17 +71,19 @@ void test() { #if TEST_STD_VER > 20 test(STR(R"('\u{0}')"), STR("?}"), '\x00'); test(STR("'a'"), STR("?}"), 'a'); +# ifndef TEST_HAS_NO_UNICODE if constexpr (std::same_as) { test(STR(R"('\x{80}')"), STR("?}"), '\x80'); test(STR(R"('\x{ff}')"), STR("?}"), '\xff'); } -# ifndef TEST_HAS_NO_WIDE_CHARACTERS +# ifndef TEST_HAS_NO_WIDE_CHARACTERS else { test(STR(R"('\u{80}')"), STR("?}"), '\x80'); test(STR("'\u00ff'"), STR("?}"), '\xff'); } -# endif // TEST_HAS_NO_WIDE_CHARACTERS -#endif // TEST_STD_VER > 20 +# endif // TEST_HAS_NO_WIDE_CHARACTERS +# endif // TEST_HAS_NO_UNICODE +#endif // TEST_STD_VER > 20 test(STR("10000000"), STR("b}"), char(-128)); test(STR("11111111"), STR("b}"), char(-1)); -- cgit v1.1