aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Jaeger <aj@suse.de>2003-09-15 11:31:17 +0200
committerAndreas Jaeger <aj@gcc.gnu.org>2003-09-15 11:31:17 +0200
commitc034f12167b8e88ea94f496f7f786064b9074814 (patch)
treee8af0c2a48f55bb04305f893645f855b6871b356
parent863d938c6a762da34248523b4424d9052e28555d (diff)
downloadgcc-c034f12167b8e88ea94f496f7f786064b9074814.zip
gcc-c034f12167b8e88ea94f496f7f786064b9074814.tar.gz
gcc-c034f12167b8e88ea94f496f7f786064b9074814.tar.bz2
invoke.texi (Warning Options): Describe -Wold-style-definition.
2003-09-15 Andreas Jaeger <aj@suse.de> Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * 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 <aj@suse.de> * gcc.dg/Wold-style-definition-1.c: New test. From-SVN: r71400
-rw-r--r--gcc/c-common.c4
-rw-r--r--gcc/c-common.h4
-rw-r--r--gcc/c-opts.c4
-rw-r--r--gcc/c-parse.in7
-rw-r--r--gcc/c.opt4
-rw-r--r--gcc/doc/invoke.texi7
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/Wold-style-definition-1.c24
8 files changed, 57 insertions, 1 deletions
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 <aj@suse.de>
+
+ * gcc.dg/Wold-style-definition-1.c: New test.
+
2003-09-14 Mark Mitchell <mark@codesourcery.com>
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 <aj@suse.de> */
+/* { 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) {}