diagnostics: Add new option -fdiagnostics-plain-output

Adds the new option -fdiagnostics-plain-output, which is an alias for
several others:

    -fno-diagnostics-show-caret
    -fno-diagnostics-show-line-numbers
    -fdiagnostics-color=never
    -fdiagnostics-urls=never

The idea is that in the future, if the default behavior of diagnostics is
changed to add some fancy feature or other, then the
-fdiagnostics-plain-output option will also be changed accordingly so that
the old behavior is preserved in the presence of this option. This allows
us to use -fdiagnostics-plain-output in in the testsuite, such that the
testsuite (specifically the setting of TEST_ALWAYS_FLAGS in prune.exp)
does not need to be touched whenever diagnostics get a new look. This also
removes the need to add workarounds to compat.exp for every new option
that may be needed in a newer version of the compiler, but is not
supported in older versions.

gcc/ChangeLog:

	* common.opt: Add new option -fdiagnostics-plain-output.
	* doc/invoke.texi: Document it.
	* opts-common.c (decode_cmdline_options_to_array): Implement it.
	(decode_cmdline_option): Add missing const qualifier to argv.

libstdc++-v3/ChangeLog:

	* testsuite/lib/libstdc++.exp: Use the new option
	-fdiagnostics-plain-output.

gcc/testsuite/ChangeLog:

	* lib/prune.exp: Change TEST_ALWAYS_FLAGS to use -fdiagnostics-plain-output.
	* lib/c-compat.exp: Adapt to the prune.exp change.
This commit is contained in:
Lewis Hyatt 2020-08-13 13:05:46 -04:00
parent 22dc89f807
commit 129a1319c0
6 changed files with 84 additions and 9 deletions

View File

@ -1378,6 +1378,10 @@ fdiagnostics-path-format=
Common Joined RejectNegative Var(flag_diagnostics_path_format) Enum(diagnostic_path_format) Init(DPF_INLINE_EVENTS)
Specify how to print any control-flow path associated with a diagnostic.
fdiagnostics-plain-output
Driver Common RejectNegative
Turn off any diagnostics features that complicate the output, such as line numbers, color, and warning URLs.
ftabstop=
Common Joined RejectNegative UInteger
-ftabstop=<number> Distance between tab stops for column reporting.

View File

@ -280,6 +280,7 @@ Objective-C and Objective-C++ Dialects}.
@item Diagnostic Message Formatting Options
@xref{Diagnostic Message Formatting Options,,Options to Control Diagnostic Messages Formatting}.
@gccoptlist{-fmessage-length=@var{n} @gol
-fdiagnostics-plain-output @gol
-fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]} @gol
-fdiagnostics-color=@r{[}auto@r{|}never@r{|}always@r{]} @gol
-fdiagnostics-urls=@r{[}auto@r{|}never@r{|}always@r{]} @gol
@ -4291,6 +4292,19 @@ Note - this option also affects the display of the @samp{#error} and
function/type/variable attribute. It does not however affect the
@samp{pragma GCC warning} and @samp{pragma GCC error} pragmas.
@item -fdiagnostics-plain-output
This option requests that diagnostic output look as plain as possible, which
may be useful when running @command{dejagnu} or other utilities that need to
parse diagnostics output and prefer that it remain more stable over time.
@option{-fdiagnostics-plain-output} is currently equivalent to the following
options:
@gccoptlist{-fno-diagnostics-show-caret @gol
-fno-diagnostics-show-line-numbers @gol
-fdiagnostics-color=never @gol
-fdiagnostics-urls=never}
In the future, if GCC changes the default appearance of its diagnostics, the
corresponding option to disable the new behavior will be added to this list.
@item -fdiagnostics-show-location=once
@opindex fdiagnostics-show-location
Only meaningful in line-wrapping mode. Instructs the diagnostic messages

View File

@ -529,7 +529,7 @@ add_misspelling_candidates (auto_vec<char *> *candidates,
consumed. */
static unsigned int
decode_cmdline_option (const char **argv, unsigned int lang_mask,
decode_cmdline_option (const char *const *argv, unsigned int lang_mask,
struct cl_decoded_option *decoded)
{
size_t opt_index;
@ -944,7 +944,8 @@ decode_cmdline_options_to_array (unsigned int argc, const char **argv,
struct cl_decoded_option *opt_array;
unsigned int num_decoded_options;
opt_array = XNEWVEC (struct cl_decoded_option, argc);
int opt_array_len = argc;
opt_array = XNEWVEC (struct cl_decoded_option, opt_array_len);
opt_array[0].opt_index = OPT_SPECIAL_program_name;
opt_array[0].warn_message = NULL;
@ -981,6 +982,40 @@ decode_cmdline_options_to_array (unsigned int argc, const char **argv,
argv[++i] = replacement;
}
/* Expand -fdiagnostics-plain-output to its constituents. This needs
to happen here so that prune_options can handle -fdiagnostics-color
specially. */
if (!strcmp (opt, "-fdiagnostics-plain-output"))
{
/* If you have changed the default diagnostics output, and this new
output is not appropriately "plain" (e.g., the change needs to be
undone in order for the testsuite to work properly), then please do
the following:
1. Add the necessary option to undo the new behavior to
the array below.
2. Update the documentation for -fdiagnostics-plain-output
in invoke.texi. */
const char *const expanded_args[] = {
"-fno-diagnostics-show-caret",
"-fno-diagnostics-show-line-numbers",
"-fdiagnostics-color=never",
"-fdiagnostics-urls=never",
};
const int num_expanded = ARRAY_SIZE (expanded_args);
opt_array_len += num_expanded - 1;
opt_array = XRESIZEVEC (struct cl_decoded_option,
opt_array, opt_array_len);
for (int j = 0, nj; j < num_expanded; j += nj)
{
nj = decode_cmdline_option (expanded_args + j, lang_mask,
&opt_array[num_decoded_options]);
num_decoded_options++;
}
n = 1;
continue;
}
n = decode_cmdline_option (argv + i, lang_mask,
&opt_array[num_decoded_options]);
num_decoded_options++;

View File

@ -36,24 +36,34 @@ load_lib target-libpath.exp
proc compat-use-alt-compiler { } {
global GCC_UNDER_TEST ALT_CC_UNDER_TEST
global compat_same_alt compat_alt_caret compat_alt_color compat_no_line_no
global compat_alt_urls
global compat_alt_urls compat_alt_plain_output
global TEST_ALWAYS_FLAGS
# We don't need to do this if the alternate compiler is actually
# the same as the compiler under test.
if { $compat_same_alt == 0 } then {
set GCC_UNDER_TEST $ALT_CC_UNDER_TEST
# These flags are no longer added to TEST_ALWAYS_FLAGS by prune.exp
# because they are subsumed by -fdiagnostics-plain-output. Add them back
# for compatibility testing with older compilers that do not understand
# -fdiagnostics-plain-output.
set TEST_ALWAYS_FLAGS "-fno-diagnostics-show-caret -fno-diagnostics-show-line-numbers -fdiagnostics-color=never -fdiagnostics-urls=never $TEST_ALWAYS_FLAGS"
if { $compat_alt_caret == 0 } then {
regsub -- "-fno-diagnostics-show-caret" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS
regsub -all -- "-fno-diagnostics-show-caret" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS
}
if { $compat_alt_color == 0 } then {
regsub -- "-fdiagnostics-color=never" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS
regsub -all -- "-fdiagnostics-color=never" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS
}
if { $compat_alt_urls == 0 } then {
regsub -- "-fdiagnostics-urls=never" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS
regsub -all -- "-fdiagnostics-urls=never" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS
}
if { $compat_no_line_no == 0 } then {
regsub -- "-fno-diagnostics-show-line-numbers" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS
regsub -all -- "-fno-diagnostics-show-line-numbers" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS
}
if { $compat_alt_plain_output == 0 } then {
regsub -all -- "-fdiagnostics-plain-output" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS
}
restore_gcc_exec_prefix_env_var
}
@ -85,12 +95,14 @@ proc compat_setup_dfp { } {
global compat_alt_caret
global compat_alt_color
global compat_alt_urls
global compat_alt_plain_output
global compat_no_line_no
global TEST_ALWAYS_FLAGS compat_save_TEST_ALWAYS_FLAGS
set compat_alt_caret 0
set compat_alt_color 0
set compat_alt_urls 0
set compat_alt_plain_output 0
set compat_no_line_no 0
set compat_save_TEST_ALWAYS_FLAGS $TEST_ALWAYS_FLAGS
@ -119,6 +131,10 @@ proc compat_setup_dfp { } {
int dummy; } "-fno-diagnostics-show-line-numbers"] != 0 } {
set compat_no_line_no 1
}
if { [check_no_compiler_messages_nocache compat_alt_has_plain_output object {
int dummy; } "-fdiagnostics-plain-output"] != 0 } {
set compat_alt_plain_output 1
}
compat-use-tst-compiler
}

View File

@ -18,10 +18,16 @@
load_lib multiline.exp
# Add options to TEST_ALWAYS_FLAGS so that diagnostics have the expected output
# format. Note: You should not normally need to add more options here. If you
# have made a change to the default diagnostic output format and are wanting to
# undo that in the testsuite here, then please update the handling of
# -fdiagnostics-plain-output in opts-common.c instead.
if ![info exists TEST_ALWAYS_FLAGS] {
set TEST_ALWAYS_FLAGS ""
}
set TEST_ALWAYS_FLAGS "-fno-diagnostics-show-caret -fno-diagnostics-show-line-numbers -fdiagnostics-color=never -fdiagnostics-urls=never $TEST_ALWAYS_FLAGS"
set TEST_ALWAYS_FLAGS "-fdiagnostics-plain-output $TEST_ALWAYS_FLAGS"
proc prune_gcc_output { text } {
global srcdir

View File

@ -482,7 +482,7 @@ proc v3_target_compile { source dest type options } {
global STATIC_LIBCXXFLAGS
global tool
lappend options "additional_flags=-fno-diagnostics-show-caret -fdiagnostics-color=never -fdiagnostics-urls=never"
lappend options "additional_flags=-fdiagnostics-plain-output"
if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
lappend options "libs=${gluefile}"