(Sorry, never a bringer of good news...) > From: Jonathan Wakely <jwak...@redhat.com> > Date: Mon, 8 Jan 2024 01:15:50 +0000
> Tested x86_64-linux and aarch64-linux. Pushed to trunk. > > -- >8 -- > > This change ensures that char and wchar_t arguments are formatted > consistently when using integer presentation types. This avoids > non-portable std::format output that depends on whether char and wchar_t > happen to be signed or unsigned on the target. Formatting '\xff' as an > integer will now always format 255 and not sometimes -1. This was > approved in Kona 2023 as a DR for C++20 so the change is implemented > unconditionally. > > Also make character formatters check for _Pres_c explicitly and call > _M_format_character directly. This avoid the overhead of calling format > and _S_to_character and then calling _M_format_character anyway. > > libstdc++-v3/ChangeLog: > > * include/bits/version.def (format_uchar): Define. > * include/bits/version.h: Regenerate. > * include/std/format (formatter<C, C>::format): Check for > _Pres_c and call _M_format_character directly. Cast C to its > unsigned equivalent for formatting as an integer. > (formatter<char, wchar_t>::format): Likewise. > (basic_format_arg(T&)): Store char arguments as unsigned char > for formatting to a wide string. > * testsuite/std/format/functions/format.cc: Adjust test. Check > formatting of For some reason, this (r14-6990-g74a0dab18292be) breaks a build of (newlib targets) at least cris-elf and arm-eabi: libtool: compile: /obj/./gcc/xgcc -shared-libgcc -B/obj/./gcc -nostdinc++ -L/obj/cris-elf/libstdc++-v3/src -L/obj/cris-elf/libstdc++-v3/src/.libs -L/obj/cris-elf/libstdc++-v3/libsupc++/.libs -nostdinc -B/obj/cris-elf/newlib/ -isystem /obj/cris-elf/newlib/targ-include -isystem /x/gcc/newlib/libc/include -B/obj/cris-elf/libgloss/cris -L/obj/cris-elf/libgloss/libnosys -L/x/gcc/libgloss/cris -B/x/cris-elf/pre/cris-elf/bin/ -B/x/cris-elf/pre/cris-elf/lib/ -isystem /x/cris-elf/pre/cris-elf/include -isystem /x/cris-elf/pre/cris-elf/sys-include -I/x/gcc/libstdc++-v3/../libgcc -I/obj/cris-elf/libstdc++-v3/include/cris-elf -I/obj/cris-elf/libstdc++-v3/include -I/x/gcc/libstdc++-v3/libsupc++ -std=gnu++20 -fno-implicit-templates -Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi=2 -fdiagnostics-show-location=once -ffunction-sections -fdata-sections -frandom-seed=tzdb.lo -fimplicit-templates -g -O2 -I. -c /x/gcc/libstdc++-v3/src/c++20/tzdb.cc -o tzdb.o In file included from /x/gcc/newlib/libc/include/time.h:11, from /obj/cris-elf/libstdc++-v3/include/ctime:42, from /obj/cris-elf/libstdc++-v3/include/bits/chrono.h:40, from /obj/cris-elf/libstdc++-v3/include/chrono:41, from /x/gcc/libstdc++-v3/src/c++20/tzdb.cc:31: /obj/cris-elf/libstdc++-v3/include/bits/unicode.h:86:37: error: declaration does not declare anything [-fpermissive] 86 | inline constexpr _Null_sentinel_t __null_sentinel; | ^~~~~~~~~~~~~~~ make[5]: *** [Makefile:754: tzdb.lo] Error 1 I don't see anything immediately related to that line in the patch, though, so the actual cause and fix isn't obvious, at least to me. brgds, H-P