+2010-04-12 Shujing Zhao <pearly.zhao@oracle.com>
+
+ PR c/36774
+ * c-decl.c (start_function): Move forward check for nested function.
+
2010-04-11 Kaz Kojima <kkojima@gcc.gnu.org>
* config/sh/sh-protos.h (sh_legitimize_reload_address): Declare.
error_mark_node is replaced below (in pop_scope) with the BLOCK. */
DECL_INITIAL (decl1) = error_mark_node;
+ /* A nested function is not global. */
+ if (current_function_decl != 0)
+ TREE_PUBLIC (decl1) = 0;
+
/* If this definition isn't a prototype and we had a prototype declaration
before, copy the arg type info from that prototype. */
old_decl = lookup_name_in_scope (DECL_NAME (decl1), current_scope);
(This does not mean `static' in the C sense!) */
TREE_STATIC (decl1) = 1;
- /* A nested function is not global. */
- if (current_function_decl != 0)
- TREE_PUBLIC (decl1) = 0;
-
/* This is the earliest point at which we might know the assembler
name of the function. Thus, if it's set before this, die horribly. */
gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl1));
+2010-04-12 Shujing Zhao <pearly.zhao@oracle.com>
+
+ PR c/36774
+ * gcc.dg/pr36774-1.c: New test.
+ * gcc.dg/pr36774-2.c: New test.
+
2010-04-11 Kaushik Phatak <kaushik.phatak@kpitcummins.com>
* gcc.target/sh/rte-delay-slot.c: New test.
--- /dev/null
+/* Nested functions shouldn't produce warnings if defined before first use.
+ Bug 36774. Test with -Wmissing-prototypes. */
+/* { dg-do compile } */
+/* { dg-options "-Wmissing-prototypes" } */
+
+int foo(int a) { /* { dg-warning "no previous prototype" } */
+ int bar(int b) { return b; } /* { dg-bogus "no previous prototype" } */
+ return bar(a);
+}
--- /dev/null
+/* Nested functions shouldn't produce warnings if defined before first use.
+ Bug 36774. Test with -Wmissing-declarations. */
+/* { dg-do compile } */
+/* { dg-options "-Wmissing-declarations" } */
+
+int foo(int a) { /* { dg-warning "no previous declaration" } */
+ int bar(int b) { return b; } /* { dg-bogus "no previous declaration" } */
+ return bar(a);
+}