analyzer: workaround for nested pp_printf
authorDavid Malcolm <dmalcolm@redhat.com>
Wed, 5 Feb 2020 20:26:44 +0000 (15:26 -0500)
committerDavid Malcolm <dmalcolm@redhat.com>
Tue, 11 Feb 2020 18:28:25 +0000 (13:28 -0500)
commitc46d057f55748520e819dcd8e04bca71be9902b2
treea7c1e73a40adf4c605561c446f27600d564154d6
parenta5e3dd5d2e0073f585fa97d6b961752432c3d122
analyzer: workaround for nested pp_printf

The dumps from the analyzer sometimes contain garbled output.

The root cause is due to nesting of calls to pp_printf: I'm using
pp_printf with %qT to print types with a PP using default_tree_printer.

default_tree_printer handles 'T' (and various other codes) via
  dump_generic_node (pp, t, 0, TDF_SLIM, 0);
and dump_generic_node can call pp_printf in various ways, leading
to a pp_printf within a pp_printf, and garbled output.

I don't think it's feasible to fix pp_printf to be reentrant, in
stage 4, at least, so for the moment this patch works around it
in the analyzer.

gcc/analyzer/ChangeLog:
* region-model.cc (print_quoted_type): New function.
(svalue::print): Use it to replace %qT.
(region::dump_to_pp): Likewise.
(region::dump_child_label): Likewise.
(region::print_fields): Likewise.
gcc/analyzer/ChangeLog
gcc/analyzer/region-model.cc