aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2016-05-12 10:59:11 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2016-05-12 10:59:11 +0000
commita5fbf76d427b3ecee39a091185bb6c67d0c80f8a (patch)
treeb32bdfac1d9fb7e811bf88e877d9301ba135fdc1 /gcc
parent5acc47a40d13af51cd1709f0238c798a666bcd7b (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/opts.c29
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/opts-7.c6
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
diff --git a/gcc/opts.c b/gcc/opts.c
index 0f9431a..63d41ca 100644
--- a/gcc/opts.c
+++ b/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",
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 } */