Skip to content
Snippets Groups Projects
Commit 384faebd authored by Jakub Jelinek's avatar Jakub Jelinek Committed by Jakub Jelinek
Browse files

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  <jakub@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.
parent 14493126
No related branches found
No related tags found
No related merge requests found
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment