On Fri, 2024-11-22 at 17:04 -0500, Marek Polacek wrote:
> 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.

Thanks.

Based on your notes above and with my "diagnostics" maintainer hat on
I've taken the liberty of pushing the patch to trunk (as r15-5928-
g2576dd68a60b3f).

Dave

>  
> > 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
> 

Reply via email to