mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
29eb509ccb
commit
ddbbcb1981
|
|
@ -1,3 +1,9 @@
|
|||
2016-07-15 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/71858
|
||||
* c-common.h (enum lookup_name_fuzzy_kind): Add
|
||||
FUZZY_LOOKUP_FUNCTION_NAME.
|
||||
|
||||
2016-07-08 Jason Merrill <jason@redhat.com>
|
||||
|
||||
P0145: Refining Expression Order for C++.
|
||||
|
|
|
|||
|
|
@ -994,6 +994,9 @@ enum lookup_name_fuzzy_kind {
|
|||
/* Names of types. */
|
||||
FUZZY_LOOKUP_TYPENAME,
|
||||
|
||||
/* Names of function decls. */
|
||||
FUZZY_LOOKUP_FUNCTION_NAME,
|
||||
|
||||
/* Any name. */
|
||||
FUZZY_LOOKUP_NAME
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
2016-07-15 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/71858
|
||||
* gcc.dg/spellcheck-identifiers-3.c: New test.
|
||||
|
||||
2016-07-15 Andre Vehreschild <vehre@gcc.gnu.org>
|
||||
|
||||
PR fortran/71807
|
||||
|
|
|
|||
|
|
@ -0,0 +1,45 @@
|
|||
/* PR c/71858 */
|
||||
/* Only consider function names, function pointers and macros for implicit function declarations. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wimplicit-function-declaration -fdiagnostics-show-caret" } */
|
||||
|
||||
void fn1abcd (void);
|
||||
|
||||
void
|
||||
test_1 (int fn1bacd)
|
||||
{
|
||||
fn1badc (); /* { dg-warning "3: implicit declaration of function .fn1badc.; did you mean .fn1abcd.?" } */
|
||||
/* { dg-begin-multiline-output "" }
|
||||
fn1badc ();
|
||||
^~~~~~~
|
||||
fn1abcd
|
||||
{ dg-end-multiline-output "" } */
|
||||
}
|
||||
|
||||
void fn2efgh (void);
|
||||
void (*fn2efhg) (void);
|
||||
|
||||
void
|
||||
test_2 (void)
|
||||
{
|
||||
fn2fehg (); /* { dg-warning "3: implicit declaration of function .fn2fehg.; did you mean .fn2efhg.?" } */
|
||||
/* { dg-begin-multiline-output "" }
|
||||
fn2fehg ();
|
||||
^~~~~~~
|
||||
fn2efhg
|
||||
{ dg-end-multiline-output "" } */
|
||||
}
|
||||
|
||||
void fn3ijkl (void);
|
||||
typedef int fn3ijlk;
|
||||
|
||||
void
|
||||
test_3 (void)
|
||||
{
|
||||
fn3jilk (); /* { dg-warning "3: implicit declaration of function .fn3jilk.; did you mean .fn3ijkl.?" } */
|
||||
/* { dg-begin-multiline-output "" }
|
||||
fn3jilk ();
|
||||
^~~~~~~
|
||||
fn3ijkl
|
||||
{ dg-end-multiline-output "" } */
|
||||
}
|
||||
Loading…
Reference in New Issue