From e9c9a142b49d069c5b7c24d47b07756e9d591956 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 1 Oct 2019 21:58:17 +0000 Subject: 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 --- gcc/c-family/ChangeLog | 5 +++++ gcc/c-family/c-opts.c | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'gcc/c-family') diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 811947a..0eade3c 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,8 @@ +2019-10-01 David Malcolm + + * c-opts.c (c_diagnostic_finalizer): Temporarily clear prefix when + calling diagnostic_show_locus, rather than destroying it afterwards. + 2019-10-01 Jakub Jelinek PR c++/91925 diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c index 23ab4cf..949d96a 100644 --- a/gcc/c-family/c-opts.c +++ b/gcc/c-family/c-opts.c @@ -168,11 +168,13 @@ c_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); /* By default print macro expansion contexts in the diagnostic finalizer -- for tokens resulting from macro expansion. */ virt_loc_aware_diagnostic_finalizer (context, diagnostic); - pp_destroy_prefix (context->printer); + pp_set_prefix (context->printer, saved_prefix); pp_flush (context->printer); } -- cgit v1.1