https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117110
--- Comment #7 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>: https://gcc.gnu.org/g:384faebde257b0b5a0aa334718ef1b645d4c8d1e commit r15-4345-g384faebde257b0b5a0aa334718ef1b645d4c8d1e Author: Jakub Jelinek <ja...@redhat.com> Date: Tue Oct 15 07:50:35 2024 +0200 genmatch: Revert recent genmatch changes, instead add custom diag_vfprintf routine [PR117110] My recent changes to genmatch apparently broke bootstrap on FreeBSD and Darwin and perhaps others, and also broke $build != $host builds including canadian cross. The change was to link in libcommon.a into build/genmatch, so that we can use pp_format_verbatim. Unfortunately that has various dependencies in libcommon.a, and more importantly, libcommon.a is a host library, while build/genmatch carefully links with build/vec.o etc., build version of libcpp. So, in order to use pretty-print.o stuff, we'd need to build a build/ version of all those objects and worse ensure there is and we properly link build version of libintl and/or libiconv when needed (those 2 are the reasons for FreeBSD/Darwin failures). The following patch just reverts those changes and instead adds a very simple variant of gcc_diag style vfprintf, which prints the result directly into a stream. We don't need anything fancy, like UTF-8 quotes, colors, URLs, in the usual case genmatch shouldn't print anything at all. The patch implements what pretty-print.cc implements, except the fancy stuff (no colors, no URLs printed, quotes always printed just as 'something', strings even in %qs printed normally rather than trying to pass through ASCII and valid UTF-8 and use <80><35> style printing for the rest) and except %@ and %e (neither libcpp nor genmatch.cc use those currently and they need extra structures etc. which aren't used in libcpp at all). It handles both "%.*s %d" and "%3$.*2$s %1$d" styles just in case something got translated (although at least the cross-compiler and stage1 genmatch shouldn't be translating anything, but stage2+ native can). I've tested it with hacking up most of pretty-print.cc self-tests to just use warning_at ((location_t) 1, ...) and doing manual verification of what was printed vs. what was expected (with a few additions for the %M$ style formats); as it goes into a FILE * directly, I'm afraid self-tests of this aren't easily possible. 2024-10-15 Jakub Jelinek <ja...@redhat.com> PR bootstrap/117110 * Makefile.in (generated_files, generated_match_files, build/genmatch$(build_exeext), LINKER_FOR_BUILD): Revert 2024-10-12 changes. * genmatch.cc: Don't include pretty-print.h and input.h. (fatal, ggc_internal_cleared_alloc, ggc_free, line_table, linemap_client_expand_location_to_spelling_point): Revert 2024-10-12 changes. (DIAG_ARGMAX): Define. (diag_integer_with_precision): Define. (diag_vfprintf): New function. (diagnostic_cb): Use diag_vfprintf instead of pp_format_verbatim. (output_line_directive): Revert 2024-10-12 changes.