From 9f5f08476e8979046ad3a13865d984c428eae442 Mon Sep 17 00:00:00 2001 From: Stefan Pintilie Date: Fri, 25 Feb 2022 08:48:58 -0600 Subject: [PATCH] [libcxx] Fix the type in __estimate_column_width It seems that we are using wchar_t in __estimate_column_width and assume that it is a 32 bit type. However, on AIX 32 the size of wchar_t is only 16 bits. Changed wchar_t to uint32_t since the variable is being passed to a function that uses uint32_t anyway. Reviewed By: hubert.reinterpretcast, daltenty, Mordante, #libc, Quuxplusone Differential Revision: https://reviews.llvm.org/D119770 --- libcxx/include/__format/parser_std_format_spec.h | 2 +- .../format.string.std/std_format_spec_string_unicode.pass.cpp | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/libcxx/include/__format/parser_std_format_spec.h b/libcxx/include/__format/parser_std_format_spec.h index 57f4e46..f92a9fa 100644 --- a/libcxx/include/__format/parser_std_format_spec.h +++ b/libcxx/include/__format/parser_std_format_spec.h @@ -1271,7 +1271,7 @@ __estimate_column_width(const _CharT* __first, const _CharT* __last, size_t __result = 0; while (__first != __last) { - wchar_t __c = *__first; + uint32_t __c = *__first; __result += __column_width(__c); if (__result > __maximum) diff --git a/libcxx/test/libcxx/utilities/format/format.string/format.string.std/std_format_spec_string_unicode.pass.cpp b/libcxx/test/libcxx/utilities/format/format.string/format.string.std/std_format_spec_string_unicode.pass.cpp index 2f92ae8..6da1574 100644 --- a/libcxx/test/libcxx/utilities/format/format.string/format.string.std/std_format_spec_string_unicode.pass.cpp +++ b/libcxx/test/libcxx/utilities/format/format.string/format.string.std/std_format_spec_string_unicode.pass.cpp @@ -9,9 +9,6 @@ // UNSUPPORTED: libcpp-no-concepts // UNSUPPORTED: libcpp-has-no-incomplete-format -// Fails for 32-bit builds on AIX. -// UNSUPPORTED: LIBCXX-AIX-FIXME - // UTF-32 doesn't work properly // XFAIL: windows -- 2.7.4