From 21dd958800ce8dfc89be000f614bbefe709ad04b Mon Sep 17 00:00:00 2001 From: aj Date: Mon, 15 Sep 2003 09:31:17 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@71400 138bc75d-0d04-0410-961f-82ee72b054a4 --- 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/testsuite/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 4e63749..5268806 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 6ce5661..d9cbb2c 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 da342a8..ee957f7 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 1338455..bb9cc1a 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 bfe81aa..6c4d12e 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 7637e15..059135f 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 d3dc2c0..c9c3b28 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 0000000..d4fb8bd --- /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) {} -- 2.7.4