spellcheck bugfixes: don't offer the goal string as a suggestion
gcc/cp/ChangeLog: PR c++/77922 * name-lookup.c (lookup_name_fuzzy): Filter out reserved words that were filtered out by init_reswords. gcc/ChangeLog: PR c++/72774 PR c++/72786 PR c++/77922 PR c++/78313 * spellcheck.c (selftest::test_find_closest_string): Verify that we don't offer the goal string as a suggestion. * spellcheck.h (best_match::get_best_meaningful_candidate): Don't offer the goal string as a suggestion. gcc/testsuite/ChangeLog: PR c++/72774 PR c++/72786 PR c++/77922 PR c++/78313 * g++.dg/spellcheck-c++-11-keyword.C: New test case. * g++.dg/spellcheck-macro-ordering.C: New test case. * g++.dg/spellcheck-pr78313.C: New test case. From-SVN: r242965
This commit is contained in:
parent
8684b29203
commit
8bf3cdff10
@ -1,3 +1,15 @@
|
|||||||
|
2016-11-29 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
|
PR c++/72774
|
||||||
|
PR c++/72786
|
||||||
|
PR c++/77922
|
||||||
|
PR c++/78313
|
||||||
|
* spellcheck.c (selftest::test_find_closest_string): Verify that
|
||||||
|
we don't offer the goal string as a suggestion.
|
||||||
|
* spellcheck.h (best_match::get_best_meaningful_candidate): Don't
|
||||||
|
offer the goal string as a suggestion.
|
||||||
|
|
||||||
|
|
||||||
2016-11-29 Claudiu Zissulescu <claziss@synopsys.com>
|
2016-11-29 Claudiu Zissulescu <claziss@synopsys.com>
|
||||||
|
|
||||||
* config/arc/arc.c (arc_override_options): Avoid selection of
|
* config/arc/arc.c (arc_override_options): Avoid selection of
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
2016-11-29 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
|
PR c++/77922
|
||||||
|
* name-lookup.c (lookup_name_fuzzy): Filter out reserved words
|
||||||
|
that were filtered out by init_reswords.
|
||||||
|
|
||||||
2016-11-28 Jakub Jelinek <jakub@redhat.com>
|
2016-11-28 Jakub Jelinek <jakub@redhat.com>
|
||||||
Jason Merrill <jason@redhat.com>
|
Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
|
@ -4812,6 +4812,12 @@ lookup_name_fuzzy (tree name, enum lookup_name_fuzzy_kind kind)
|
|||||||
if (!resword_identifier)
|
if (!resword_identifier)
|
||||||
continue;
|
continue;
|
||||||
gcc_assert (TREE_CODE (resword_identifier) == IDENTIFIER_NODE);
|
gcc_assert (TREE_CODE (resword_identifier) == IDENTIFIER_NODE);
|
||||||
|
|
||||||
|
/* Only consider reserved words that survived the
|
||||||
|
filtering in init_reswords (e.g. for -std). */
|
||||||
|
if (!C_IS_RESERVED_WORD (resword_identifier))
|
||||||
|
continue;
|
||||||
|
|
||||||
bm.consider (resword_identifier);
|
bm.consider (resword_identifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -210,6 +210,11 @@ test_find_closest_string ()
|
|||||||
ASSERT_STREQ ("banana", find_closest_string ("banyan", &candidates));
|
ASSERT_STREQ ("banana", find_closest_string ("banyan", &candidates));
|
||||||
ASSERT_STREQ ("cherry", find_closest_string ("berry", &candidates));
|
ASSERT_STREQ ("cherry", find_closest_string ("berry", &candidates));
|
||||||
ASSERT_EQ (NULL, find_closest_string ("not like the others", &candidates));
|
ASSERT_EQ (NULL, find_closest_string ("not like the others", &candidates));
|
||||||
|
|
||||||
|
/* If the goal string somehow makes it into the candidate list, offering
|
||||||
|
it as a suggestion will be nonsensical. Verify that we don't offer such
|
||||||
|
suggestions. */
|
||||||
|
ASSERT_EQ (NULL, find_closest_string ("banana", &candidates));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Test data for test_metric_conditions. */
|
/* Test data for test_metric_conditions. */
|
||||||
|
@ -165,6 +165,16 @@ class best_match
|
|||||||
if (m_best_distance > cutoff)
|
if (m_best_distance > cutoff)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If the goal string somehow makes it into the candidate list, offering
|
||||||
|
it as a suggestion will be nonsensical e.g.
|
||||||
|
'constexpr' does not name a type; did you mean 'constexpr'?
|
||||||
|
Ultimately such suggestions are due to bugs in constructing the
|
||||||
|
candidate list, but as a band-aid, do not offer suggestions for
|
||||||
|
distance == 0 (where candidate == goal). */
|
||||||
|
if (m_best_distance == 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
return m_best_candidate;
|
return m_best_candidate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
|
2016-11-29 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
|
PR c++/72774
|
||||||
|
PR c++/72786
|
||||||
|
PR c++/77922
|
||||||
|
PR c++/78313
|
||||||
|
* g++.dg/spellcheck-c++-11-keyword.C: New test case.
|
||||||
|
* g++.dg/spellcheck-macro-ordering.C: New test case.
|
||||||
|
* g++.dg/spellcheck-pr78313.C: New test case.
|
||||||
|
|
||||||
2016-11-29 Tamar Christina <tamar.christina@arm.com>
|
2016-11-29 Tamar Christina <tamar.christina@arm.com>
|
||||||
|
|
||||||
* gcc.target/aarch64/advsimd-intrinsics/arm-neon-ref.h
|
* gcc.target/aarch64/advsimd-intrinsics/arm-neon-ref.h
|
||||||
|
15
gcc/testsuite/g++.dg/spellcheck-c++-11-keyword.C
Normal file
15
gcc/testsuite/g++.dg/spellcheck-c++-11-keyword.C
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/* c++/77922: "constexpr" is only available from C++11 onwards.
|
||||||
|
We shouldn't offer it as a spellcheck suggestion in C++98. */
|
||||||
|
// { dg-options "-std=c++98" }
|
||||||
|
|
||||||
|
constexpr int a = 1; // { dg-bogus "did you mean" }
|
||||||
|
// { dg-error ".constexpr. does not name a type" "" { target *-*-* } .-1 }
|
||||||
|
// { dg-message "C\\+\\+11 .constexpr. only available with -std=c\\+\\+11 or -std=gnu\\+\\+11" "" { target *-*-* } .-2 }
|
||||||
|
|
||||||
|
/* If the user typos "constexpr" (here as "consexpr"), don't offer it as a
|
||||||
|
spelling suggestion in C++98 mode. */
|
||||||
|
consexpr int a = 1; // { dg-bogus "did you mean" }
|
||||||
|
// { dg-error ".consexpr. does not name a type" "" { target *-*-* } .-1 }
|
||||||
|
|
||||||
|
decltype i = 0; // { dg-bogus "did you mean" }
|
||||||
|
// { dg-error ".decltype. does not name a type" "" { target *-*-* } .-1 }
|
15
gcc/testsuite/g++.dg/spellcheck-macro-ordering.C
Normal file
15
gcc/testsuite/g++.dg/spellcheck-macro-ordering.C
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// PR c++/72786
|
||||||
|
|
||||||
|
/* Example of a macro-ordering issue, where the use is before the defn. */
|
||||||
|
|
||||||
|
class DocTargetDriver {
|
||||||
|
virtual void clone() const OVERRIDE { }
|
||||||
|
/* Offering "OVERRIDE" as a spelling suggestion for "OVERRIDE" would be
|
||||||
|
nonsensical. */
|
||||||
|
// { dg-bogus "did you mean" "" { target *-*-* } .-3 }
|
||||||
|
// { dg-error "expected .;. at end of member declaration" "" { target *-*-* } .-4 }
|
||||||
|
// { dg-error ".OVERRIDE. does not name a type" "" { target *-*-* } .-5 }
|
||||||
|
};
|
||||||
|
|
||||||
|
#define OVERRIDE override
|
||||||
|
|
11
gcc/testsuite/g++.dg/spellcheck-pr78313.C
Normal file
11
gcc/testsuite/g++.dg/spellcheck-pr78313.C
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// PR c++/78313 (see also PR c++/72774)
|
||||||
|
// { dg-do compile }
|
||||||
|
|
||||||
|
void baz ();
|
||||||
|
namespace A { void foo (); }
|
||||||
|
void bar ()
|
||||||
|
{
|
||||||
|
using A::foo;
|
||||||
|
0 ? static_cast<foo> (0) : baz; // { dg-bogus "did you mean" }
|
||||||
|
// { dg-error "does not name a type" "" { target *-*-* } .-1 }
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user