The default diagnostic tree printer relies on dump_generic_node which for some reason manages to clobber the diagnostic pretty-printer state so we see garbled diagnostics like
/home/rguenther/src/trunk/gcc/calls.c: In function 'expand_call': D.6750.coeffs[0]'/home/rguenther/src/trunk/gcc/dojump.c:118:28: warning: may be used uninitialized in this function [-Wmaybe-uninitialized] when the diagnostic is emitted by the LTO fronted. The following approach using a temporary pretty-printer for the dump_generic_node call fixes this for some unknown reason and we issue /home/rguenther/src/trunk/gcc/calls.c: In function 'expand_call': /home/rguenther/src/trunk/gcc/dojump.c:118:28: warning: 'MEM[(struct poly_int *)&save].D.6750.coeffs[0]' may be used uninitialized in this function [-Wmaybe-uninitialized] [LTO] Bootstrapped and tested on x86_64-unknown-linux-gnu, OK for trunk? Thanks, Richard. 2021-02-26 Richard Biener <rguent...@suse.de> PR middle-end/97855 * tree-diagnostic.c (default_tree_printer): Use a temporary pretty-printer when formatting a tree via dump_generic_node. --- gcc/tree-diagnostic.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gcc/tree-diagnostic.c b/gcc/tree-diagnostic.c index 95b8ef30070..f124e627aad 100644 --- a/gcc/tree-diagnostic.c +++ b/gcc/tree-diagnostic.c @@ -300,7 +300,11 @@ default_tree_printer (pretty_printer *pp, text_info *text, const char *spec, pp_string (pp, n); } else - dump_generic_node (pp, t, 0, TDF_SLIM, 0); + { + pretty_printer buffer; + dump_generic_node (&buffer, t, 0, TDF_SLIM, 0); + pp_string (pp, pp_formatted_text (&buffer)); + } return true; } -- 2.26.2