diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/gcc.c | 9 | ||||
-rw-r--r-- | gcc/opts-common.c | 10 | ||||
-rw-r--r-- | gcc/opts.h | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/spellcheck-options-12.c | 7 |
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 } */ |