diff options
author | David Malcolm <dmalcolm@redhat.com> | 2016-06-30 14:28:50 +0000 |
---|---|---|
committer | David Malcolm <dmalcolm@gcc.gnu.org> | 2016-06-30 14:28:50 +0000 |
commit | 603107fbb0da3acb1ce296dfef1a592a6451c0b4 (patch) | |
tree | 40d1bc99d4ff173785ae8b7f061698acb8a05f26 /gcc | |
parent | 72fb6bae83446096e467e3713e8e40b2433f8220 (diff) | |
download | gcc-603107fbb0da3acb1ce296dfef1a592a6451c0b4.zip gcc-603107fbb0da3acb1ce296dfef1a592a6451c0b4.tar.gz gcc-603107fbb0da3acb1ce296dfef1a592a6451c0b4.tar.bz2 |
Fix bogus option suggestions for RejectNegative options (PR driver/71651)
gcc/ChangeLog:
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.
gcc/testsuite/ChangeLog:
PR driver/71651
* gcc.dg/spellcheck-options-12.c: New test case.
From-SVN: r237880
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-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 | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/spellcheck-options-12.c | 7 |
6 files changed, 37 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8d00f72..28b9387 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +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 @@ -7700,12 +7700,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_: @@ -7729,7 +7731,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 4e1ef49..8634b52 100644 --- a/gcc/opts-common.c +++ b/gcc/opts-common.c @@ -374,8 +374,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" @@ -387,9 +388,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++) @@ -398,6 +401,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, @@ -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 1828ca6..8527a2f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +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 0000000..b5e65e5 --- /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 } */ |