diff options
author | Marek Polacek <polacek@redhat.com> | 2016-05-12 10:59:11 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2016-05-12 10:59:11 +0000 |
commit | a5fbf76d427b3ecee39a091185bb6c67d0c80f8a (patch) | |
tree | b32bdfac1d9fb7e811bf88e877d9301ba135fdc1 /gcc | |
parent | 5acc47a40d13af51cd1709f0238c798a666bcd7b (diff) | |
download | gcc-a5fbf76d427b3ecee39a091185bb6c67d0c80f8a.zip gcc-a5fbf76d427b3ecee39a091185bb6c67d0c80f8a.tar.gz gcc-a5fbf76d427b3ecee39a091185bb6c67d0c80f8a.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/opts.c | 29 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/opts-7.c | 6 |
4 files changed, 33 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 23a4869..711d8d5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 @@ -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", diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 41e5d51..c1b2323 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 diff --git a/gcc/testsuite/gcc.dg/opts-7.c b/gcc/testsuite/gcc.dg/opts-7.c new file mode 100644 index 0000000..c54d0b8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/opts-7.c @@ -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 } */ |