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:
parent
5acc47a40d
commit
a5fbf76d42
|
@ -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
|
||||
|
|
29
gcc/opts.c
29
gcc/opts.c
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 } */
|
Loading…
Reference in New Issue