c++: give suggestion on misspelled class name [PR116771]
gcc/cp/ChangeLog: PR c++/116771 * parser.cc (cp_parser_name_lookup_error): Provide suggestions for the case of complete failure where there is no scope. gcc/testsuite/ChangeLog: PR c++/116771 * g++.dg/spellcheck-pr116771.C: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
This commit is contained in:
parent
68aefc6988
commit
2576dd68a6
2 changed files with 24 additions and 1 deletions
|
@ -3399,7 +3399,21 @@ cp_parser_name_lookup_error (cp_parser* parser,
|
|||
error_at (location, "%<%T::%E%> has not been declared",
|
||||
parser->object_scope, name);
|
||||
else
|
||||
error_at (location, "%qE has not been declared", name);
|
||||
{
|
||||
auto_diagnostic_group d;
|
||||
name_hint hint
|
||||
= lookup_name_fuzzy (name, FUZZY_LOOKUP_TYPENAME, location);
|
||||
if (const char *suggestion = hint.suggestion ())
|
||||
{
|
||||
gcc_rich_location richloc (location);
|
||||
richloc.add_fixit_replace (suggestion);
|
||||
error_at (&richloc,
|
||||
"%qE has not been declared; did you mean %qs?",
|
||||
name, suggestion);
|
||||
}
|
||||
else
|
||||
error_at (location, "%qE has not been declared", name);
|
||||
}
|
||||
}
|
||||
else if (parser->scope && parser->scope != global_namespace)
|
||||
{
|
||||
|
|
9
gcc/testsuite/g++.dg/spellcheck-pr116771.C
Normal file
9
gcc/testsuite/g++.dg/spellcheck-pr116771.C
Normal file
|
@ -0,0 +1,9 @@
|
|||
class layout_printer
|
||||
{
|
||||
void print_newline ();
|
||||
};
|
||||
|
||||
void
|
||||
layout_pirnter::print_newline () // { dg-error "'layout_pirnter' has not been declared; did you mean 'layout_printer'" }
|
||||
{
|
||||
}
|
Loading…
Add table
Reference in a new issue