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:
parent
22dc89f807
commit
129a1319c0
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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++;
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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}"
|
||||
|
Loading…
Reference in New Issue
Block a user