diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/diagnostic.c | 52 |
2 files changed, 36 insertions, 24 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a6fc221..079fb47 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2017-05-05 David Malcolm <dmalcolm@redhat.com> + * diagnostic.c (diagnostic_report_diagnostic): Eliminate + save/restor of format_spec. Move option-printing code to... + (print_option_information): ...this new function, and + reimplement by simply printing to the pretty_printer, + rather than appending to the format string. + +2017-05-05 David Malcolm <dmalcolm@redhat.com> + * diagnostic.c (diagnostic_report_diagnostic): Split out pragma handling logic into... (update_effective_level_from_pragmas): ...this new function. diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c index b61c09e..f1b6b1e 100644 --- a/gcc/diagnostic.c +++ b/gcc/diagnostic.c @@ -815,6 +815,32 @@ update_effective_level_from_pragmas (diagnostic_context *context, return diag_class; } +/* Print any metadata about the option used to control DIAGNOSTIC to CONTEXT's + printer, e.g. " [-Werror=uninitialized]". + Subroutine of diagnostic_report_diagnostic. */ + +static void +print_option_information (diagnostic_context *context, + const diagnostic_info *diagnostic, + diagnostic_t orig_diag_kind) +{ + char *option_text; + + option_text = context->option_name (context, diagnostic->option_index, + orig_diag_kind, diagnostic->kind); + + if (option_text) + { + pretty_printer *pp = context->printer; + pp_string (pp, " ["); + pp_string (pp, colorize_start (pp_show_color (pp), + diagnostic_kind_color[diagnostic->kind])); + pp_string (pp, option_text); + pp_string (pp, colorize_stop (pp_show_color (pp))); + pp_character (pp, ']'); + free (option_text); + } +} /* Report a diagnostic message (an error or a warning) as specified by DC. This function is *the* subroutine in terms of which front-ends @@ -829,7 +855,6 @@ diagnostic_report_diagnostic (diagnostic_context *context, { location_t location = diagnostic_location (diagnostic); diagnostic_t orig_diag_kind = diagnostic->kind; - const char *saved_format_spec; /* Give preference to being able to inhibit warnings, before they get reclassified to something else. */ @@ -925,33 +950,13 @@ diagnostic_report_diagnostic (diagnostic_context *context, else ++diagnostic_kind_count (context, diagnostic->kind); - saved_format_spec = diagnostic->message.format_spec; - if (context->show_option_requested) - { - char *option_text; - - option_text = context->option_name (context, diagnostic->option_index, - orig_diag_kind, diagnostic->kind); - - if (option_text) - { - const char *cs - = colorize_start (pp_show_color (context->printer), - diagnostic_kind_color[diagnostic->kind]); - const char *ce = colorize_stop (pp_show_color (context->printer)); - diagnostic->message.format_spec - = ACONCAT ((diagnostic->message.format_spec, - " ", - "[", cs, option_text, ce, "]", - NULL)); - free (option_text); - } - } diagnostic->message.x_data = &diagnostic->x_data; diagnostic->x_data = NULL; pp_format (context->printer, &diagnostic->message); (*diagnostic_starter (context)) (context, diagnostic); pp_output_formatted_text (context->printer); + if (context->show_option_requested) + print_option_information (context, diagnostic, orig_diag_kind); (*diagnostic_finalizer (context)) (context, diagnostic); if (context->parseable_fixits_p) { @@ -959,7 +964,6 @@ diagnostic_report_diagnostic (diagnostic_context *context, pp_flush (context->printer); } diagnostic_action_after_output (context, diagnostic->kind); - diagnostic->message.format_spec = saved_format_spec; diagnostic->x_data = NULL; if (context->edit_context_ptr) |