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:
David Malcolm 2024-12-04 17:34:27 -05:00
parent 68aefc6988
commit 2576dd68a6
2 changed files with 24 additions and 1 deletions

View file

@ -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)
{

View 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'" }
{
}