Backport r273660

2019-07-22  Martin Liska  <mliska@suse.cz>

	Backport from mainline
	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>

	Backport from mainline
	2019-07-22  Martin Liska  <mliska@suse.cz>

	PR driver/91172
	* gcc.dg/pr91172.c: New test.

From-SVN: r273664
This commit is contained in:
Martin Liska 2019-07-22 11:37:18 +02:00 committed by Martin Liska
parent b956e05c57
commit 883e30c4d9
4 changed files with 42 additions and 2 deletions

View File

@ -1,3 +1,13 @@
2019-07-22 Martin Liska <mliska@suse.cz>
Backport from mainline
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>
Backport from mainline.

View File

@ -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)

View File

@ -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);

View File

@ -1,3 +1,11 @@
2019-07-22 Martin Liska <mliska@suse.cz>
Backport from mainline
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>
Backport from mainline