Commit c4712597 by Shujing Zhao Committed by Shujing Zhao

re PR c/36774 (-Wmissing-prototypes triggers on nested functions)

gcc/
2010-04-12  Shujing Zhao  <pearly.zhao@oracle.com>

        PR c/36774
        * c-decl.c (start_function): Move forward check for nested function.

gcc/testsuite/
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.

From-SVN: r158214
parent fe5859f0
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.
......
......@@ -7443,6 +7443,10 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
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);
......@@ -7543,10 +7547,6 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
(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.
......
/* 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);
}
/* 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);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment