re PR c/71858 (Surprising suggestions for misspellings)
authorJakub Jelinek <jakub@redhat.com>
Thu, 14 Jul 2016 18:34:00 +0000 (20:34 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 14 Jul 2016 18:34:00 +0000 (20:34 +0200)
PR c/71858
* c-decl.c (lookup_name_fuzzy): Ignore binding->invisible.

* gcc.dg/spellcheck-identifiers.c (snprintf): Declare.
* gcc.dg/spellcheck-identifiers-2.c: New test.
* gcc.dg/diagnostic-token-ranges.c (nanl): Declare.
* c-c++-common/attributes-1.c: Adjust dg-prune-output.

From-SVN: r238352

gcc/c/ChangeLog
gcc/c/c-decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/attributes-1.c
gcc/testsuite/gcc.dg/diagnostic-token-ranges.c
gcc/testsuite/gcc.dg/spellcheck-identifiers-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/spellcheck-identifiers.c

index 96dbf6b922cee58b007a12ccb2c66ee90b9e73cd..6d35693cb2fdad6088d21809f402b80b8ed6bfb4 100644 (file)
@@ -1,3 +1,8 @@
+2016-07-14  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/71858
+       * c-decl.c (lookup_name_fuzzy): Ignore binding->invisible.
+
 2016-07-12  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
 
        * c-parser.c (c_parser_generic_selection): Make type of variable
index c173796b438cc65ffb9f678db77c8bcfa11e7b27..e2e0f640b0a389582b21c4054dc8709229f344e5 100644 (file)
@@ -4021,7 +4021,7 @@ lookup_name_fuzzy (tree name, enum lookup_name_fuzzy_kind kind)
   for (c_scope *scope = current_scope; scope; scope = scope->outer)
     for (c_binding *binding = scope->bindings; binding; binding = binding->prev)
       {
-       if (!binding->id)
+       if (!binding->id || binding->invisible)
          continue;
        /* Don't use bindings from implicitly declared functions,
           as they were likely misspellings themselves.  */
index 6b0c7b8a1b524d28118baf14e23c3cccd936fd56..9585de48e791ffbb8ca9b4a0dfa18ef265134216 100644 (file)
@@ -1,3 +1,11 @@
+2016-07-14  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/71858
+       * gcc.dg/spellcheck-identifiers.c (snprintf): Declare.
+       * gcc.dg/spellcheck-identifiers-2.c: New test.
+       * gcc.dg/diagnostic-token-ranges.c (nanl): Declare.
+       * c-c++-common/attributes-1.c: Adjust dg-prune-output.
+
 2016-07-14  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/71872
index c348526b0d4b3cc56c7f94a53a07832f0b1510a7..c76339ff680957bf99962c21379a8afb2baaebf0 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-prune-output "undeclared here \\(not in a function\\); did you mean .carg..|\[^\n\r\]* was not declared in this scope" } */
+/* { dg-prune-output "undeclared here \\(not in a function\\); did you mean .char..|\[^\n\r\]* was not declared in this scope" } */
 
 void* my_calloc(unsigned, unsigned) __attribute__((alloc_size(1,bar))); /* { dg-warning "outside range" } */
 void* my_realloc(void*, unsigned) __attribute__((alloc_size(bar))); /* { dg-warning "outside range" } */
index 19399490c04d3c2d88120d58966b4739947a4fd7..20ceff517f993733c9be9140ed8a7b3f52de162b 100644 (file)
@@ -2,6 +2,8 @@
 
 /* Verify that various diagnostics show source code ranges.  */
 
+long double nanl (const char *);
+
 /* These ones merely use token ranges; they don't use tree ranges.  */
 
 void undeclared_identifier (void)
diff --git a/gcc/testsuite/gcc.dg/spellcheck-identifiers-2.c b/gcc/testsuite/gcc.dg/spellcheck-identifiers-2.c
new file mode 100644 (file)
index 0000000..ad6e9d3
--- /dev/null
@@ -0,0 +1,33 @@
+/* PR c/71858 */
+/* Make sure anticipated builtins are not considered before they are declared.  */
+/* { dg-do compile } */
+/* { dg-options "-Wimplicit-function-declaration -fdiagnostics-show-caret" } */
+
+int sscafn (const char *, const char *, ...);
+
+int
+test_1 (const char *p)
+{
+  int i;
+  return ssacnf (p, "%d", &i); /* { dg-warning "10: implicit declaration of function .ssacnf.; did you mean .sscafn.?" } */
+  /* { dg-begin-multiline-output "" }
+   return ssacnf (p, "%d", &i);
+          ^~~~~~
+          sscafn
+   { dg-end-multiline-output "" } */
+}
+
+int scafn (const char *, ...);
+int scanf (const char *, ...);
+
+int
+test_2 (void)
+{
+  int i;
+  return sacnf ("%d", &i); /* { dg-warning "10: implicit declaration of function .sacnf.; did you mean .scanf.?" } */
+  /* { dg-begin-multiline-output "" }
+   return sacnf ("%d", &i);
+          ^~~~~
+          scanf
+   { dg-end-multiline-output "" } */
+}
index 22a12d0fa1cbb9f271bd4ea13e02d6e6d7642e2e..063e3f9eda19a021c2d4a8bca4acf46b1771238c 100644 (file)
@@ -121,7 +121,7 @@ test_6 (enum foo f)
     }
 }
 
-/* Verify that we offer names of builtins as suggestions.  */
+int snprintf (char *, __SIZE_TYPE__, const char *, ...);
 
 void
 test_7 (int i, int j)