]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c++: give suggestion on misspelled class name [PR116771]
authorDavid Malcolm <dmalcolm@redhat.com>
Wed, 4 Dec 2024 22:34:27 +0000 (17:34 -0500)
committerDavid Malcolm <dmalcolm@redhat.com>
Wed, 4 Dec 2024 22:34:27 +0000 (17:34 -0500)
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>
gcc/cp/parser.cc
gcc/testsuite/g++.dg/spellcheck-pr116771.C [new file with mode: 0644]

index 2995a11c60fe8924e577ccabf7970c8059b68fb0..80e14b1bd925c369a922671ca33401b5527d41e2 100644 (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)
     {
diff --git a/gcc/testsuite/g++.dg/spellcheck-pr116771.C b/gcc/testsuite/g++.dg/spellcheck-pr116771.C
new file mode 100644 (file)
index 0000000..fd8bd6d
--- /dev/null
@@ -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'" }
+{
+}