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

Reply via email to