diff options
author | Manuel López-Ibáñez <manu@gcc.gnu.org> | 2015-09-24 16:37:43 +0000 |
---|---|---|
committer | Manuel López-Ibáñez <manu@gcc.gnu.org> | 2015-09-24 16:37:43 +0000 |
commit | 3563212292d643dee54ff75771032ea92fe34e78 (patch) | |
tree | 65b1cf01a9ae795a5ecb148e8eac6ed626108fc6 | |
parent | 2af16a7c1e190f54a2d276a1088d39bcc9cbdce4 (diff) | |
download | gcc-3563212292d643dee54ff75771032ea92fe34e78.zip gcc-3563212292d643dee54ff75771032ea92fe34e78.tar.gz gcc-3563212292d643dee54ff75771032ea92fe34e78.tar.bz2 |
fdiagnostics-color=never does not disable color for some diagnostics
Actually, I was trying to reject non-warning options as argument to
-Werror=. However, the new test fails because -fdiagnostics-color=never is
always placed by the driver after the warning options when calling the compiler
proper. This patch prunes all -fdiagnostics-color from the command-line but the
last one, which is moved to the first position.
gcc/ChangeLog:
2015-09-24 Manuel López-Ibáñez <manu@gcc.gnu.org>
PR driver/67640
* opts-common.c (prune_options): Discard all -fdiagnostics-color
but the last one, which is moved to the front to be processed
first.
* opts.c (enable_warning_as_error): Reject options that do not
control warnings.
gcc/testsuite/ChangeLog:
2015-09-24 Manuel López-Ibáñez <manu@gcc.gnu.org>
PR driver/67640
* gcc.dg/Werror-13.c: New test.
From-SVN: r228094
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/opts-common.c | 17 | ||||
-rw-r--r-- | gcc/opts.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/Werror-13.c | 8 |
5 files changed, 43 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 05ff03f..d0893001 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2015-09-24 Manuel López-Ibáñez <manu@gcc.gnu.org> + + PR driver/67640 + * opts-common.c (prune_options): Discard all -fdiagnostics-color + but the last one, which is moved to the front to be processed + first. + * opts.c (enable_warning_as_error): Reject options that do not + control warnings. + 2015-09-24 Jiong Wang <jiong.wang@arm.com> * config/aarch64/aarch64.c (aarch64_print_operand): Add "CONST" support. diff --git a/gcc/opts-common.c b/gcc/opts-common.c index 3bcbaf1..d9bf4d4 100644 --- a/gcc/opts-common.c +++ b/gcc/opts-common.c @@ -825,6 +825,7 @@ prune_options (struct cl_decoded_option **decoded_options, = XNEWVEC (struct cl_decoded_option, old_decoded_options_count); unsigned int i; const struct cl_option *option; + unsigned int fdiagnostics_color_idx = 0; /* Remove arguments which are negated by others after them. */ new_decoded_options_count = 0; @@ -844,6 +845,11 @@ prune_options (struct cl_decoded_option **decoded_options, case OPT_SPECIAL_input_file: goto keep; + /* Do not save OPT_fdiagnostics_color_, just remember the last one. */ + case OPT_fdiagnostics_color_: + fdiagnostics_color_idx = i; + continue; + default: gcc_assert (opt_idx < cl_options_count); option = &cl_options[opt_idx]; @@ -879,6 +885,17 @@ keep: } } + if (fdiagnostics_color_idx > 1) + { + /* We put the last -fdiagnostics-color= at the first position + after argv[0] so it can take effect immediately. */ + memmove (new_decoded_options + 2, new_decoded_options + 1, + sizeof (struct cl_decoded_option) + * (new_decoded_options_count - 1)); + new_decoded_options[1] = old_decoded_options[fdiagnostics_color_idx]; + new_decoded_options_count++; + } + free (old_decoded_options); new_decoded_options = XRESIZEVEC (struct cl_decoded_option, new_decoded_options, @@ -2359,9 +2359,10 @@ enable_warning_as_error (const char *arg, int value, unsigned int lang_mask, strcpy (new_option + 1, arg); option_index = find_opt (new_option, lang_mask); if (option_index == OPT_SPECIAL_unknown) - { - error_at (loc, "-Werror=%s: no option -%s", arg, new_option); - } + error_at (loc, "-Werror=%s: no option -%s", arg, new_option); + else if (!(cl_options[option_index].flags & CL_WARNING)) + error_at (loc, "-Werror=%s: -%s is not an option that controls warnings", + arg, new_option); else { const diagnostic_t kind = value ? DK_ERROR : DK_WARNING; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 912e411..de6131b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-09-24 Manuel López-Ibáñez <manu@gcc.gnu.org> + + PR driver/67640 + * gcc.dg/Werror-13.c: New test. + 2015-09-24 Szabolcs Nagy <szabolcs.nagy@arm.com> * gcc.target/aarch64/target_attr_10.c (foo): Use dg-message for note. diff --git a/gcc/testsuite/gcc.dg/Werror-13.c b/gcc/testsuite/gcc.dg/Werror-13.c new file mode 100644 index 0000000..e8aa992 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Werror-13.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-Werror=error -Werror=p, -Werror=l, -Werror=fatal-errors" } */ +/* { dg-error "-Wp, is not an option that controls warnings" "" { target *-*-* } 0 } */ +/* { dg-error "-Wl, is not an option that controls warnings" "" { target *-*-* } 0 } */ +/* { dg-error "-Werror is not an option that controls warnings" "" { target *-*-* } 0 } */ +/* { dg-error "-Wfatal-errors is not an option that controls warnings" "" { target *-*-* } 0 } */ + +int i; |