diff options
author | Lewis Hyatt <lhyatt@gmail.com> | 2020-08-13 13:05:46 -0400 |
---|---|---|
committer | Lewis Hyatt <lhyatt@gmail.com> | 2020-08-14 09:29:19 -0400 |
commit | 129a1319c0ab73f4bfc5598dffedb06378b00fc0 (patch) | |
tree | 968c9d5710c2a4431c5c98d8e15ca9474b7ca9be /gcc/opts-common.c | |
parent | 22dc89f8073cd0126efa72aa3ab88e80c78d45e3 (diff) | |
download | gcc-129a1319c0ab73f4bfc5598dffedb06378b00fc0.zip gcc-129a1319c0ab73f4bfc5598dffedb06378b00fc0.tar.gz gcc-129a1319c0ab73f4bfc5598dffedb06378b00fc0.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/opts-common.c')
-rw-r--r-- | gcc/opts-common.c | 39 |
1 files changed, 37 insertions, 2 deletions
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++; |