On Fri, Nov 22, 2024 at 04:56:08PM -0500, David Malcolm wrote: > Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu. > > OK for trunk?
Not an approval, but the patch LGTM -- it follows the usual hint.suggestion() pattern elsewhere in the front end. > 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 <dmalc...@redhat.com> > --- > gcc/cp/parser.cc | 16 +++++++++++++++- > gcc/testsuite/g++.dg/spellcheck-pr116771.C | 9 +++++++++ > 2 files changed, 24 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/g++.dg/spellcheck-pr116771.C > > diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc > index ed10f58422ea..06ee36e6727c 100644 > --- a/gcc/cp/parser.cc > +++ b/gcc/cp/parser.cc > @@ -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) > { > diff --git a/gcc/testsuite/g++.dg/spellcheck-pr116771.C > b/gcc/testsuite/g++.dg/spellcheck-pr116771.C > new file mode 100644 > index 000000000000..fd8bd6d46cbd > --- /dev/null > +++ b/gcc/testsuite/g++.dg/spellcheck-pr116771.C > @@ -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'" } > +{ > +} > -- > 2.26.3 > Marek