aboutsummaryrefslogtreecommitdiff
path: root/gcc/opts-common.c
diff options
context:
space:
mode:
authorLewis Hyatt <lhyatt@gmail.com>2020-08-13 13:05:46 -0400
committerLewis Hyatt <lhyatt@gmail.com>2020-08-14 09:29:19 -0400
commit129a1319c0ab73f4bfc5598dffedb06378b00fc0 (patch)
tree968c9d5710c2a4431c5c98d8e15ca9474b7ca9be /gcc/opts-common.c
parent22dc89f8073cd0126efa72aa3ab88e80c78d45e3 (diff)
downloadgcc-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.c39
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++;