aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLewis Hyatt <lhyatt@gmail.com>2020-08-13 13:05:46 -0400
committerGiuliano Belinassi <giuliano.belinassi@usp.br>2020-08-17 15:08:13 -0300
commitd339a789314ca0549a3fb952ff32a7395641bbab (patch)
treeb1239f59329156a1a8ed5a94165e2b7af3639471
parent70a973ad305aea4c67a2222a95604431541ea079 (diff)
downloadgcc-d339a789314ca0549a3fb952ff32a7395641bbab.zip
gcc-d339a789314ca0549a3fb952ff32a7395641bbab.tar.gz
gcc-d339a789314ca0549a3fb952ff32a7395641bbab.tar.bz2
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.
-rw-r--r--gcc/common.opt4
-rw-r--r--gcc/doc/invoke.texi14
-rw-r--r--gcc/opts-common.c39
-rw-r--r--gcc/testsuite/lib/c-compat.exp26
-rw-r--r--gcc/testsuite/lib/prune.exp8
-rw-r--r--libstdc++-v3/testsuite/lib/libstdc++.exp2
6 files changed, 84 insertions, 9 deletions
diff --git a/gcc/common.opt b/gcc/common.opt
index 666ae25..4b08e91 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -1395,6 +1395,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.
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index dea1e18..70dc1ab 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -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
diff --git a/gcc/opts-common.c b/gcc/opts-common.c
index de9510a..237e4ce 100644
--- a/gcc/opts-common.c
+++ b/gcc/opts-common.c
@@ -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++;
diff --git a/gcc/testsuite/lib/c-compat.exp b/gcc/testsuite/lib/c-compat.exp
index 9493c21..2b67317 100644
--- a/gcc/testsuite/lib/c-compat.exp
+++ b/gcc/testsuite/lib/c-compat.exp
@@ -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
}
diff --git a/gcc/testsuite/lib/prune.exp b/gcc/testsuite/lib/prune.exp
index 58a7396..190367c 100644
--- a/gcc/testsuite/lib/prune.exp
+++ b/gcc/testsuite/lib/prune.exp
@@ -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
diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp
index 16963f2..78484f7 100644
--- a/libstdc++-v3/testsuite/lib/libstdc++.exp
+++ b/libstdc++-v3/testsuite/lib/libstdc++.exp
@@ -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}"