aboutsummaryrefslogtreecommitdiff
path: root/gcc/c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-07-15 12:40:39 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2016-07-15 12:40:39 +0200
commitddbbcb1981b4f7c8ee18f4aecaf84c2cb2d98e2e (patch)
tree56e0c00028a6dfb864fa929c7d4929c7c0a6b999 /gcc/c
parent29eb509ccb9acd5aac604e6796e376bc09c4626d (diff)
downloadgcc-ddbbcb1981b4f7c8ee18f4aecaf84c2cb2d98e2e.zip
gcc-ddbbcb1981b4f7c8ee18f4aecaf84c2cb2d98e2e.tar.gz
gcc-ddbbcb1981b4f7c8ee18f4aecaf84c2cb2d98e2e.tar.bz2
re PR c/71858 (Surprising suggestions for misspellings)
PR c/71858 * c-common.h (enum lookup_name_fuzzy_kind): Add FUZZY_LOOKUP_FUNCTION_NAME. * c-decl.c (implicit_decl_warning): Use FUZZY_LOOKUP_FUNCTION_NAME instead of FUZZY_LOOKUP_NAME. (lookup_name_fuzzy): For FUZZY_LOOKUP_FUNCTION_NAME consider FUNCTION_DECLs, {VAR,PARM}_DECLs function pointers and macros. * gcc.dg/spellcheck-identifiers-3.c: New test. From-SVN: r238369
Diffstat (limited to 'gcc/c')
-rw-r--r--gcc/c/ChangeLog8
-rw-r--r--gcc/c/c-decl.c29
2 files changed, 33 insertions, 4 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 6d35693..968d942 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,11 @@
+2016-07-15 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/71858
+ * c-decl.c (implicit_decl_warning): Use FUZZY_LOOKUP_FUNCTION_NAME
+ instead of FUZZY_LOOKUP_NAME.
+ (lookup_name_fuzzy): For FUZZY_LOOKUP_FUNCTION_NAME consider
+ FUNCTION_DECLs, {VAR,PARM}_DECLs function pointers and macros.
+
2016-07-14 Jakub Jelinek <jakub@redhat.com>
PR c/71858
diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c
index e2e0f64..955c0e8 100644
--- a/gcc/c/c-decl.c
+++ b/gcc/c/c-decl.c
@@ -3090,7 +3090,7 @@ implicit_decl_warning (location_t loc, tree id, tree olddecl)
bool warned;
tree hint = NULL_TREE;
if (!olddecl)
- hint = lookup_name_fuzzy (id, FUZZY_LOOKUP_NAME);
+ hint = lookup_name_fuzzy (id, FUZZY_LOOKUP_FUNCTION_NAME);
if (flag_isoc99)
if (hint)
@@ -4028,9 +4028,30 @@ lookup_name_fuzzy (tree name, enum lookup_name_fuzzy_kind kind)
if (TREE_CODE (binding->decl) == FUNCTION_DECL)
if (C_DECL_IMPLICIT (binding->decl))
continue;
- if (kind == FUZZY_LOOKUP_TYPENAME)
- if (TREE_CODE (binding->decl) != TYPE_DECL)
- continue;
+ switch (kind)
+ {
+ case FUZZY_LOOKUP_TYPENAME:
+ if (TREE_CODE (binding->decl) != TYPE_DECL)
+ continue;
+ break;
+
+ case FUZZY_LOOKUP_FUNCTION_NAME:
+ if (TREE_CODE (binding->decl) != FUNCTION_DECL)
+ {
+ /* Allow function pointers. */
+ if ((VAR_P (binding->decl)
+ || TREE_CODE (binding->decl) == PARM_DECL)
+ && TREE_CODE (TREE_TYPE (binding->decl)) == POINTER_TYPE
+ && (TREE_CODE (TREE_TYPE (TREE_TYPE (binding->decl)))
+ == FUNCTION_TYPE))
+ break;
+ continue;
+ }
+ break;
+
+ default:
+ break;
+ }
bm.consider (binding->id);
}