diff options
author | Lewis Hyatt <lhyatt@gmail.com> | 2020-08-13 13:05:46 -0400 |
---|---|---|
committer | Giuliano Belinassi <giuliano.belinassi@usp.br> | 2020-08-17 15:08:13 -0300 |
commit | d339a789314ca0549a3fb952ff32a7395641bbab (patch) | |
tree | b1239f59329156a1a8ed5a94165e2b7af3639471 /gcc | |
parent | 70a973ad305aea4c67a2222a95604431541ea079 (diff) | |
download | gcc-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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/common.opt | 4 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 14 | ||||
-rw-r--r-- | gcc/opts-common.c | 39 | ||||
-rw-r--r-- | gcc/testsuite/lib/c-compat.exp | 26 | ||||
-rw-r--r-- | gcc/testsuite/lib/prune.exp | 8 |
5 files changed, 83 insertions, 8 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 |