re PR driver/71063 (ICE: Segmentation fault with --help="^")

PR driver/71063
	* opts.c (common_handle_option): Detect missing argument for --help^.

	* gcc.dg/opts-7.c: New test.

From-SVN: r236170
This commit is contained in:
Marek Polacek 2016-05-12 10:59:11 +00:00 committed by Marek Polacek
parent 5acc47a40d
commit a5fbf76d42
4 changed files with 33 additions and 12 deletions

View File

@ -1,3 +1,8 @@
2016-05-12 Marek Polacek <polacek@redhat.com>
PR driver/71063
* opts.c (common_handle_option): Detect missing argument for --help^.
2016-05-12 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR target/70830

View File

@ -1595,7 +1595,7 @@ common_handle_option (struct gcc_options *opts,
case OPT__help_:
{
const char * a = arg;
const char *a = arg;
unsigned int include_flags = 0;
/* Note - by default we include undocumented options when listing
specific classes. If you only want to see documented options
@ -1612,11 +1612,11 @@ common_handle_option (struct gcc_options *opts,
arg = [^]{word}[,{arg}]
word = {optimizers|target|warnings|undocumented|
params|common|<language>} */
while (* a != 0)
while (*a != 0)
{
static const struct
{
const char * string;
const char *string;
unsigned int flag;
}
specifics[] =
@ -1631,19 +1631,24 @@ common_handle_option (struct gcc_options *opts,
{ "common", CL_COMMON },
{ NULL, 0 }
};
unsigned int * pflags;
const char * comma;
unsigned int *pflags;
const char *comma;
unsigned int lang_flag, specific_flag;
unsigned int len;
unsigned int i;
if (* a == '^')
if (*a == '^')
{
++ a;
pflags = & exclude_flags;
++a;
if (*a == '\0')
{
error_at (loc, "missing argument to %qs", "--help=^");
break;
}
pflags = &exclude_flags;
}
else
pflags = & include_flags;
pflags = &include_flags;
comma = strchr (a, ',');
if (comma == NULL)
@ -1680,7 +1685,7 @@ common_handle_option (struct gcc_options *opts,
if (specific_flag != 0)
{
if (lang_flag == 0)
* pflags |= specific_flag;
*pflags |= specific_flag;
else
{
/* The option's argument matches both the start of a
@ -1689,7 +1694,7 @@ common_handle_option (struct gcc_options *opts,
specified "--help=c", but otherwise we have to issue
a warning. */
if (strncasecmp (a, "c", len) == 0)
* pflags |= lang_flag;
*pflags |= lang_flag;
else
warning_at (loc, 0,
"--help argument %q.*s is ambiguous, "
@ -1698,7 +1703,7 @@ common_handle_option (struct gcc_options *opts,
}
}
else if (lang_flag != 0)
* pflags |= lang_flag;
*pflags |= lang_flag;
else
warning_at (loc, 0,
"unrecognized argument to --help= option: %q.*s",

View File

@ -1,3 +1,8 @@
2016-05-12 Marek Polacek <polacek@redhat.com>
PR driver/71063
* gcc.dg/opts-7.c: New test.
2016-05-12 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR target/70830

View File

@ -0,0 +1,6 @@
/* PR driver/71063 */
/* Test we don't ICE. */
/* { dg-do compile } */
/* { dg-options "--help=^" } */
/* { dg-error "missing argument to" "" { target *-*-* } 0 } */