https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70339

--- Comment #3 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Author: dmalcolm
Date: Wed Jun 22 15:20:41 2016
New Revision: 237714

URL: https://gcc.gnu.org/viewcvs?rev=237714&root=gcc&view=rev
Log:
C FE: suggest corrections for misspelled identifiers and type names

gcc/c-family/ChangeLog:
        PR c/70339
        * c-common.h (enum lookup_name_fuzzy_kind): New enum.
        (lookup_name_fuzzy): New prototype.

gcc/c/ChangeLog:
        PR c/70339
        * c-decl.c: Include spellcheck-tree.h and gcc-rich-location.h.
        (implicit_decl_warning): When issuing warnings for implicit
        declarations, attempt to provide a suggestion via
        lookup_name_fuzzy.
        (undeclared_variable): Likewise when issuing errors.
        (lookup_name_in_scope): Likewise.
        (struct edit_distance_traits<cpp_hashnode *>): New struct.
        (best_macro_match): New typedef.
        (find_closest_macro_cpp_cb): New function.
        (lookup_name_fuzzy): New function.
        * c-parser.c: Include gcc-rich-location.h.
        (c_token_starts_typename): Split out case CPP_KEYWORD into...
        (c_keyword_starts_typename): ...this new function.
        (c_parser_declaration_or_fndef): When issuing errors about
        missing "struct" etc, add a fixit.  For other kinds of errors,
        attempt to provide a suggestion via lookup_name_fuzzy.
        (c_parser_parms_declarator): When looking ahead to detect typos in
        type names, also reject CPP_KEYWORD.
        (c_parser_parameter_declaration): When issuing errors about
        unknown type names, attempt to provide a suggestion via
        lookup_name_fuzzy.
        * c-tree.h (c_keyword_starts_typename): New prototype.

gcc/ChangeLog:
        PR c/70339
        * diagnostic-core.h (pedwarn_at_rich_loc): New prototype.
        * diagnostic.c (pedwarn_at_rich_loc): New function.
        * spellcheck.h (best_match::best_match): Add a
        "best_distance_so_far" optional parameter.
        (best_match::set_best_so_far): New method.
        (best_match::get_best_distance): New accessor.
        (best_match::get_best_candidate_length): New accessor.

gcc/testsuite/ChangeLog:
        PR c/70339
        * c-c++-common/attributes-1.c: Update dg-prune-output to include
        hint.
        * gcc.dg/diagnostic-token-ranges.c (undeclared_identifier): Update
        expected results due to builtin "nanl" now being suggested for
        "name".
        * gcc.dg/pr67580.c: Update expected messages.
        * gcc.dg/spellcheck-identifiers.c: New testcase.
        * gcc.dg/spellcheck-typenames.c: New testcase.

Added:
    trunk/gcc/testsuite/gcc.dg/spellcheck-identifiers.c
    trunk/gcc/testsuite/gcc.dg/spellcheck-typenames.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/c-family/ChangeLog
    trunk/gcc/c-family/c-common.h
    trunk/gcc/c/ChangeLog
    trunk/gcc/c/c-decl.c
    trunk/gcc/c/c-parser.c
    trunk/gcc/c/c-tree.h
    trunk/gcc/diagnostic-core.h
    trunk/gcc/diagnostic.c
    trunk/gcc/spellcheck.h
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/c-c++-common/attributes-1.c
    trunk/gcc/testsuite/gcc.dg/diagnostic-token-ranges.c
    trunk/gcc/testsuite/gcc.dg/pr67580.c

Reply via email to