aboutsummaryrefslogtreecommitdiff
path: root/gcc/diagnostic.c
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2019-10-01 21:58:17 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2019-10-01 21:58:17 +0000
commite9c9a142b49d069c5b7c24d47b07756e9d591956 (patch)
tree1733bd2afdb942dcf5381fec2e6e5d79071d9db8 /gcc/diagnostic.c
parenta16bc2f317ddfeb45a6b293aec4d89afe0e79a72 (diff)
downloadgcc-e9c9a142b49d069c5b7c24d47b07756e9d591956.zip
gcc-e9c9a142b49d069c5b7c24d47b07756e9d591956.tar.gz
gcc-e9c9a142b49d069c5b7c24d47b07756e9d591956.tar.bz2
Support prefixes in diagnostic_show_locus
Previously, diagnostic_show_locus saved and restored the pretty_printer's prefix, clearing it for the duration of the call. I have a patch kit in development that can benefit from applying a prefix to the output of d_s_l, so this patch adds support to d_s_l for printing such prefixes. It moves the save and restore of the pp's prefix from d_s_l to all of its callers, and updates diagnostic-show-locus.c to properly handle prefixes. gcc/c-family/ChangeLog: * c-opts.c (c_diagnostic_finalizer): Temporarily clear prefix when calling diagnostic_show_locus, rather than destroying it afterwards. gcc/ChangeLog: * diagnostic-show-locus.c (layout::print_gap_in_line_numbering): Call pp_emit_prefix. (layout::print_source_line): Likewise. (layout::start_annotation_line): Likewise. (diagnostic_show_locus): Remove call to temporarily clear the prefix. (selftest::test_one_liner_fixit_remove): Add test coverage for the interaction of pp_set_prefix with rulers and fix-it hints. * diagnostic.c (default_diagnostic_finalizer): Temporarily clear prefix when calling diagnostic_show_locus, rather than destroying it afterwards. (print_parseable_fixits): Temporarily clear prefix. * pretty-print.c (pp_format): Save and restore line_length, rather than assuming it is zero. (pp_output_formatted_text): Remove assertion that line_length is zero. gcc/fortran/ChangeLog: * error.c (gfc_diagnostic_starter): Clear the prefix before calling diagnostic_show_locus. gcc/testsuite/ChangeLog: * gcc.dg/plugin/diagnostic_group_plugin.c (test_begin_group_cb): Clear the prefix before emitting the "END GROUP" line. * gcc.dg/plugin/diagnostic_plugin_test_show_locus.c (custom_diagnostic_finalizer): Temporarily clear prefix when calling diagnostic_show_locus, rather than destroying it afterwards. From-SVN: r276433
Diffstat (limited to 'gcc/diagnostic.c')
-rw-r--r--gcc/diagnostic.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c
index 96b6fa3..1b3306c 100644
--- a/gcc/diagnostic.c
+++ b/gcc/diagnostic.c
@@ -663,8 +663,10 @@ default_diagnostic_finalizer (diagnostic_context *context,
diagnostic_info *diagnostic,
diagnostic_t)
{
+ char *saved_prefix = pp_take_prefix (context->printer);
+ pp_set_prefix (context->printer, NULL);
diagnostic_show_locus (context, diagnostic->richloc, diagnostic->kind);
- pp_destroy_prefix (context->printer);
+ pp_set_prefix (context->printer, saved_prefix);
pp_flush (context->printer);
}
@@ -811,6 +813,9 @@ print_parseable_fixits (pretty_printer *pp, rich_location *richloc)
gcc_assert (pp);
gcc_assert (richloc);
+ char *saved_prefix = pp_take_prefix (pp);
+ pp_set_prefix (pp, NULL);
+
for (unsigned i = 0; i < richloc->get_num_fixit_hints (); i++)
{
const fixit_hint *hint = richloc->get_fixit_hint (i);
@@ -827,6 +832,8 @@ print_parseable_fixits (pretty_printer *pp, rich_location *richloc)
print_escaped_string (pp, hint->get_string ());
pp_newline (pp);
}
+
+ pp_set_prefix (pp, saved_prefix);
}
/* Update the diag_class of DIAGNOSTIC based on its location