From c034f12167b8e88ea94f496f7f786064b9074814 Mon Sep 17 00:00:00 2001 From: Andreas Jaeger Date: Mon, 15 Sep 2003 11:31:17 +0200 Subject: [PATCH] invoke.texi (Warning Options): Describe -Wold-style-definition. 2003-09-15 Andreas Jaeger Kaveh R. Ghazi * doc/invoke.texi (Warning Options): Describe -Wold-style-definition. * c-opts.c (c_common_handle_option): Handle OPT_Wold_style_definition. * c-parse.in: Warn about old-style parameter definition. * c-common.c: Define warn_old_style_defintion. * c-common.h: Declare it. * c.opt: Add Wold-style-defintion. testsuite: 2003-09-15 Andreas Jaeger * gcc.dg/Wold-style-definition-1.c: New test. From-SVN: r71400 --- gcc/c-common.c | 4 ++++ gcc/c-common.h | 4 ++++ gcc/c-opts.c | 4 ++++ gcc/c-parse.in | 7 ++++++ gcc/c.opt | 4 ++++ gcc/doc/invoke.texi | 7 +++++- gcc/testsuite/ChangeLog | 4 ++++ .../gcc.dg/Wold-style-definition-1.c | 24 +++++++++++++++++++ 8 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/Wold-style-definition-1.c diff --git a/gcc/c-common.c b/gcc/c-common.c index 4e637490430..52688069332 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -429,6 +429,10 @@ int warn_implicit_int; int warn_nonnull; +/* Warn about old-style parameter declaration. */ + +int warn_old_style_definition; + /* ObjC language option variables. */ diff --git a/gcc/c-common.h b/gcc/c-common.h index 6ce5661c44a..d9cbb2ce316 100644 --- a/gcc/c-common.h +++ b/gcc/c-common.h @@ -591,6 +591,10 @@ extern int warn_implicit_int; extern int warn_nonnull; +/* Warn about old-style parameter declaration. */ + +extern int warn_old_style_definition; + /* ObjC language option variables. */ diff --git a/gcc/c-opts.c b/gcc/c-opts.c index da342a89aec..ee957f7487b 100644 --- a/gcc/c-opts.c +++ b/gcc/c-opts.c @@ -550,6 +550,10 @@ c_common_handle_option (size_t scode, const char *arg, int value) warn_nonnull = value; break; + case OPT_Wold_style_definition: + warn_old_style_definition = value; + break; + case OPT_Wold_style_cast: warn_old_style_cast = value; break; diff --git a/gcc/c-parse.in b/gcc/c-parse.in index 1338455fda5..bb9cc1a7703 100644 --- a/gcc/c-parse.in +++ b/gcc/c-parse.in @@ -757,9 +757,16 @@ old_style_parm_decls_1: if (warn_traditional && !in_system_header && parsing_iso_function_signature) warning ("traditional C rejects ISO C style function definitions"); + if (warn_old_style_definition && !in_system_header + && !parsing_iso_function_signature) + warning ("old-style parameter declaration"); parsing_iso_function_signature = false; /* Reset after warning. */ } | datadecls + { + if (warn_old_style_definition && !in_system_header) + warning ("old-style parameter declaration"); + } ; /* The following are analogous to lineno_decl, decls and decl diff --git a/gcc/c.opt b/gcc/c.opt index bfe81aa3d8f..6c4d12eb433 100644 --- a/gcc/c.opt +++ b/gcc/c.opt @@ -312,6 +312,10 @@ Wold-style-cast C++ ObjC++ Warn if a C-style cast is used in a program +Wold-style-definition +C ObjC +Warn if an old-style parameter definition is used + Woverloaded-virtual C++ ObjC++ Warn about overloaded virtual function names diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 7637e15fc59..059135f2cda 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -220,7 +220,7 @@ in the following sections. -Wmain -Wmissing-braces @gol -Wmissing-format-attribute -Wmissing-noreturn @gol -Wno-multichar -Wno-format-extra-args -Wno-format-y2k @gol --Wno-import -Wnonnull -Wpacked -Wpadded @gol +-Wno-import -Wnonnull -Wold-style-definition -Wpacked -Wpadded @gol -Wparentheses -Wpointer-arith -Wredundant-decls @gol -Wreturn-type -Wsequence-point -Wshadow @gol -Wsign-compare -Wstrict-aliasing @gol @@ -2709,6 +2709,11 @@ argument types. (An old-style function definition is permitted without a warning if preceded by a declaration which specifies the argument types.) +@item -Wold-style-definition @r{(C only)} +@opindex Wold-style-definition +Warn if an old-style function definition is used. A warning is given +even if there is a previous prototype. + @item -Wmissing-prototypes @r{(C only)} @opindex Wmissing-prototypes Warn if a global function is defined without a previous prototype diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d3dc2c0b2c0..c9c3b28ff39 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2003-09-15 Andreas Jaeger + + * gcc.dg/Wold-style-definition-1.c: New test. + 2003-09-14 Mark Mitchell PR c++/3907 diff --git a/gcc/testsuite/gcc.dg/Wold-style-definition-1.c b/gcc/testsuite/gcc.dg/Wold-style-definition-1.c new file mode 100644 index 00000000000..d4fb8bd8da1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wold-style-definition-1.c @@ -0,0 +1,24 @@ +/* Test for warning about old-style function definition. */ + +/* Origin: Andreas Jaeger */ +/* { dg-do compile } */ +/* { dg-options "-Wold-style-definition" } */ + +void +bar (a) int a; { } /* { dg-warning "old-style parameter declaration" } */ + +void bar1 () {} /* { dg-warning "old-style parameter declaration" } */ + +extern void bar2 (void); + +void bar2 () {} /* { dg-warning "old-style parameter declaration" } */ + +extern void bar3 (int); + +void bar3 (a) {} /* { dg-warning "old-style parameter declaration" } */ + +void bar4 (a) {} /* { dg-warning "old-style parameter declaration" } */ + +void bar5 (int a) {} + +void bar6 (void) {}