+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
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. */
+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
/* { 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" } */
/* 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)
--- /dev/null
+/* 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 "" } */
+}
}
}
-/* Verify that we offer names of builtins as suggestions. */
+int snprintf (char *, __SIZE_TYPE__, const char *, ...);
void
test_7 (int i, int j)