diff options
author | Martin Liska <mliska@suse.cz> | 2019-07-22 09:34:10 +0200 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2019-07-22 07:34:10 +0000 |
commit | 2df89b66f1b397c9eacd2078eb6a9b52c2c4853f (patch) | |
tree | 1981847c71cd677128a920c3d4614aed2433be88 | |
parent | 4be6c9b9a2085b32be37df4216c37b395c7bd1a2 (diff) | |
download | gcc-2df89b66f1b397c9eacd2078eb6a9b52c2c4853f.zip gcc-2df89b66f1b397c9eacd2078eb6a9b52c2c4853f.tar.gz gcc-2df89b66f1b397c9eacd2078eb6a9b52c2c4853f.tar.bz2 |
Make a warning for -Werror=wrong-language (PR driver/91172).
2019-07-22 Martin Liska <mliska@suse.cz>
PR driver/91172
* opts-common.c (decode_cmdline_option): Decode
argument of -Werror and check it for a wrong language.
* opts-global.c (complain_wrong_lang): Remove such case.
2019-07-22 Martin Liska <mliska@suse.cz>
PR driver/91172
* gcc.dg/pr91172.c: New test.
From-SVN: r273660
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/opts-common.c | 20 | ||||
-rw-r--r-- | gcc/opts-global.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr91172.c | 3 |
5 files changed, 39 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 078a7d7..ae03a33 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2019-07-22 Martin Liska <mliska@suse.cz> + + PR driver/91172 + * opts-common.c (decode_cmdline_option): Decode + argument of -Werror and check it for a wrong language. + * opts-global.c (complain_wrong_lang): Remove such case. + 2019-07-22 Claudiu Zissulescu <claziss@synopsys.com> * config/arc/arc.c (prepare_move_operands): Always use an diff --git a/gcc/opts-common.c b/gcc/opts-common.c index 660dfe6..e3f9c54 100644 --- a/gcc/opts-common.c +++ b/gcc/opts-common.c @@ -537,7 +537,8 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask, extra_args = 0; - opt_index = find_opt (argv[0] + 1, lang_mask); + const char *opt_value = argv[0] + 1; + opt_index = find_opt (opt_value, lang_mask); i = 0; while (opt_index == OPT_SPECIAL_unknown && i < ARRAY_SIZE (option_map)) @@ -745,6 +746,23 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask, /* Check if this is a switch for a different front end. */ if (!option_ok_for_language (option, lang_mask)) errors |= CL_ERR_WRONG_LANG; + else if (strcmp (option->opt_text, "-Werror=") == 0 + && strchr (opt_value, ',') == NULL) + { + /* Verify that -Werror argument is a valid warning + for a language. */ + char *werror_arg = xstrdup (opt_value + 6); + werror_arg[0] = 'W'; + + size_t warning_index = find_opt (werror_arg, lang_mask); + if (warning_index != OPT_SPECIAL_unknown) + { + const struct cl_option *warning_option + = &cl_options[warning_index]; + if (!option_ok_for_language (warning_option, lang_mask)) + errors |= CL_ERR_WRONG_LANG; + } + } /* Convert the argument to lowercase if appropriate. */ if (arg && option->cl_tolower) diff --git a/gcc/opts-global.c b/gcc/opts-global.c index bf4db77..7c5bd16 100644 --- a/gcc/opts-global.c +++ b/gcc/opts-global.c @@ -103,10 +103,14 @@ complain_wrong_lang (const struct cl_decoded_option *decoded, text, bad_lang); else if (lang_mask == CL_DRIVER) gcc_unreachable (); - else + else if (ok_langs[0] != '\0') /* Eventually this should become a hard error IMO. */ warning (0, "command-line option %qs is valid for %s but not for %s", text, ok_langs, bad_lang); + else + /* Happens for -Werror=warning_name. */ + warning (0, "%<-Werror=%> argument %qs is not valid for %s", + text, bad_lang); free (ok_langs); free (bad_lang); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 31a9d33..7332696 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-07-22 Martin Liska <mliska@suse.cz> + + PR driver/91172 + * gcc.dg/pr91172.c: New test. + 2019-07-22 Claudiu Zissulescu <claziss@synopsys.com> * gcc.target/arc/tls-2.c: New test. diff --git a/gcc/testsuite/gcc.dg/pr91172.c b/gcc/testsuite/gcc.dg/pr91172.c new file mode 100644 index 0000000..a38a058 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr91172.c @@ -0,0 +1,3 @@ +/* { dg-do compile } */ +/* { dg-options "-Werror=target-lifetime" } */ +/* { dg-warning "'-Werror\=' argument '-Werror=target-lifetime' is not valid for C" "" { target *-*-* } 0 } */ |