summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog13
-rw-r--r--gcc/gcc.c9
-rw-r--r--gcc/opts-common.c10
-rw-r--r--gcc/opts.h1
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/gcc.dg/spellcheck-options-12.c7
6 files changed, 43 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2a2c92455e3..45620a0e4d3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,16 @@
+2016-06-30 David Malcolm <dmalcolm@redhat.com>
+
+ Backport from trunk r237880.
+ 2016-06-30 David Malcolm <dmalcolm@redhat.com>
+
+ PR driver/71651
+ * gcc.c (driver::build_option_suggestions): Pass "option" to
+ add_misspelling_candidates.
+ * opts-common.c (add_misspelling_candidates): Add "option" param;
+ use it to avoid adding negated forms for options marked with
+ RejectNegative.
+ * opts.h (add_misspelling_candidates): Add "option" param.
+
2016-06-30 Jakub Jelinek <jakub@redhat.com>
PR middle-end/71693
diff --git a/gcc/gcc.c b/gcc/gcc.c
index 1af59209b31..483644284c3 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -7667,12 +7667,14 @@ driver::build_option_suggestions (void)
for (unsigned j = 0; e->values[j].arg != NULL; j++)
{
char *with_arg = concat (opt_text, e->values[j].arg, NULL);
- add_misspelling_candidates (m_option_suggestions, with_arg);
+ add_misspelling_candidates (m_option_suggestions, option,
+ with_arg);
free (with_arg);
}
}
else
- add_misspelling_candidates (m_option_suggestions, opt_text);
+ add_misspelling_candidates (m_option_suggestions, option,
+ opt_text);
break;
case OPT_fsanitize_:
@@ -7696,7 +7698,8 @@ driver::build_option_suggestions (void)
/* Add with_arg and all of its variant spellings e.g.
"-fno-sanitize=address" to candidates (albeit without
leading dashes). */
- add_misspelling_candidates (m_option_suggestions, with_arg);
+ add_misspelling_candidates (m_option_suggestions, option,
+ with_arg);
free (with_arg);
}
}
diff --git a/gcc/opts-common.c b/gcc/opts-common.c
index bb689827227..900c580019e 100644
--- a/gcc/opts-common.c
+++ b/gcc/opts-common.c
@@ -373,8 +373,9 @@ static const struct option_map option_map[] =
to specific options. We want to do the reverse: to find all the ways
that a user could validly spell an option.
- Given valid OPT_TEXT (with a leading dash), add it and all of its valid
- variant spellings to CANDIDATES, each without a leading dash.
+ Given valid OPT_TEXT (with a leading dash) for OPTION, add it and all
+ of its valid variant spellings to CANDIDATES, each without a leading
+ dash.
For example, given "-Wabi-tag", the following are added to CANDIDATES:
"Wabi-tag"
@@ -386,9 +387,11 @@ static const struct option_map option_map[] =
void
add_misspelling_candidates (auto_vec<char *> *candidates,
+ const struct cl_option *option,
const char *opt_text)
{
gcc_assert (candidates);
+ gcc_assert (option);
gcc_assert (opt_text);
candidates->safe_push (xstrdup (opt_text + 1));
for (unsigned i = 0; i < ARRAY_SIZE (option_map); i++)
@@ -397,6 +400,9 @@ add_misspelling_candidates (auto_vec<char *> *candidates,
const char *new_prefix = option_map[i].new_prefix;
size_t new_prefix_len = strlen (new_prefix);
+ if (option->cl_reject_negative && option_map[i].negated)
+ continue;
+
if (strncmp (opt_text, new_prefix, new_prefix_len) == 0)
{
char *alternative = concat (opt0 + 1, opt_text + new_prefix_len,
diff --git a/gcc/opts.h b/gcc/opts.h
index 1b5cf448a29..25d32c1ad49 100644
--- a/gcc/opts.h
+++ b/gcc/opts.h
@@ -417,6 +417,7 @@ extern const struct sanitizer_opts_s
} sanitizer_opts[];
extern void add_misspelling_candidates (auto_vec<char *> *candidates,
+ const struct cl_option *option,
const char *base_option);
#endif
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1a417f8e538..4d49f31b5cf 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2016-06-30 David Malcolm <dmalcolm@redhat.com>
+
+ Backport from trunk r237880.
+ 2016-06-30 David Malcolm <dmalcolm@redhat.com>
+
+ PR driver/71651
+ * gcc.dg/spellcheck-options-12.c: New test case.
+
2016-06-30 Jakub Jelinek <jakub@redhat.com>
PR middle-end/71693
diff --git a/gcc/testsuite/gcc.dg/spellcheck-options-12.c b/gcc/testsuite/gcc.dg/spellcheck-options-12.c
new file mode 100644
index 00000000000..b5e65e54a39
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/spellcheck-options-12.c
@@ -0,0 +1,7 @@
+/* Verify that we don't include -Wno- variants for options marked
+ with RejectNegative when considering hints for misspelled options
+ (PR driver/71651). */
+
+/* { dg-do compile } */
+/* { dg-options "-fno-stack-protector-explicit" } */
+/* { dg-error "unrecognized command line option .-fno-stack-protector-explicit.; did you mean .-fstack-protector-explicit.." "" { target *-*-* } 0 } */