From e1fd9ad27aa9785937f73e1ae1fadebd79802d04 Mon Sep 17 00:00:00 2001 From: manu Date: Sat, 23 Dec 2006 17:45:33 +0000 Subject: [PATCH] 2006-12-23 Manuel Lopez-Ibanez PR middle-end/7651 * c.opt (Wmissing-parameter-type): New. * doc/invoke.texi (Wmissing-parameter-type): Document it. (Wextra): Enabled by -Wextra. * c-opts.c (c_common_post_options): Enabled by -Wextra. * c-decl.c (store_parm_decls_oldstyle): Replace Wextra with Wmissing-parameter-type. testsuite/ * gcc.dg/Wmissing-parameter-type.c: New. * gcc.dg/Wmissing-parameter-type-Wextra.c: New. * gcc.dg/Wmissing-parameter-type-no.c: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120173 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 10 ++++++++++ gcc/c-decl.c | 4 ++-- gcc/c-opts.c | 4 +++- gcc/c.opt | 4 ++++ gcc/doc/invoke.texi | 23 +++++++++++++++------- gcc/testsuite/ChangeLog | 7 +++++++ .../gcc.dg/Wmissing-parameter-type-Wextra.c | 7 +++++++ gcc/testsuite/gcc.dg/Wmissing-parameter-type-no.c | 7 +++++++ gcc/testsuite/gcc.dg/Wmissing-parameter-type.c | 6 ++++++ 9 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/Wmissing-parameter-type-Wextra.c create mode 100644 gcc/testsuite/gcc.dg/Wmissing-parameter-type-no.c create mode 100644 gcc/testsuite/gcc.dg/Wmissing-parameter-type.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 91255aa..09056a4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2006-12-23 Manuel Lopez-Ibanez + + PR middle-end/7651 + * c.opt (Wmissing-parameter-type): New. + * doc/invoke.texi (Wmissing-parameter-type): Document it. + (Wextra): Enabled by -Wextra. + * c-opts.c (c_common_post_options): Enabled by -Wextra. + * c-decl.c (store_parm_decls_oldstyle): Replace Wextra with + Wmissing-parameter-type. + 2006-12-23 Eric Botcazou * dwarf2out.c (dbx_reg_number): Do leaf register remapping diff --git a/gcc/c-decl.c b/gcc/c-decl.c index c95f495..a9506e1 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -6414,8 +6414,8 @@ store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info) if (flag_isoc99) pedwarn ("type of %q+D defaults to %", decl); - else if (extra_warnings) - warning (OPT_Wextra, "type of %q+D defaults to %", decl); + else + warning (OPT_Wmissing_parameter_type, "type of %q+D defaults to %", decl); } TREE_PURPOSE (parm) = decl; diff --git a/gcc/c-opts.c b/gcc/c-opts.c index 12caf1b..5390a05 100644 --- a/gcc/c-opts.c +++ b/gcc/c-opts.c @@ -1026,7 +1026,7 @@ c_common_post_options (const char **pfilename) flag_exceptions = 1; /* -Wextra implies -Wclobbered, -Wempty-body, -Wsign-compare, - -Wmissing-field-initializers and -Woverride-init, + -Wmissing-field-initializers, -Wmissing-parameter-type and -Woverride-init, but not if explicitly overridden. */ if (warn_clobbered == -1) warn_clobbered = extra_warnings; @@ -1036,6 +1036,8 @@ c_common_post_options (const char **pfilename) warn_sign_compare = extra_warnings; if (warn_missing_field_initializers == -1) warn_missing_field_initializers = extra_warnings; + if (warn_missing_parameter_type == -1) + warn_missing_parameter_type = extra_warnings; if (warn_override_init == -1) warn_override_init = extra_warnings; diff --git a/gcc/c.opt b/gcc/c.opt index 74aef8e..e4d45e4 100644 --- a/gcc/c.opt +++ b/gcc/c.opt @@ -283,6 +283,10 @@ Wmissing-include-dirs C ObjC C++ ObjC++ Warn about user-specified include directories that do not exist +Wmissing-parameter-type +C ObjC Var(warn_missing_parameter_type) Init(-1) +Warn about function parameters declared without a type specifier in K&R-style functions + Wmissing-prototypes C ObjC Var(warn_missing_prototypes) Warn about global functions without prototypes diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 63f22f2..4fc0966 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -256,7 +256,8 @@ Objective-C and Objective-C++ Dialects}. @item C-only Warning Options @gccoptlist{-Wbad-function-cast -Wmissing-declarations @gol --Wmissing-prototypes -Wnested-externs -Wold-style-definition @gol +-Wmissing-parameter-type -Wmissing-prototypes @gol +-Wnested-externs -Wold-style-definition @gol -Wstrict-prototypes -Wtraditional -Wtraditional-conversion @gol -Wdeclaration-after-statement -Wpointer-sign} @@ -2908,13 +2909,10 @@ designated initializers (@pxref{Designated Inits, , Designated Initializers}). This warning can be independently controlled by @option{-Woverride-init}. -@item +@item @r{(C only)} A function parameter is declared without a type specifier in K&R-style -functions: - -@smallexample -void foo(bar) @{ @} -@end smallexample +functions. This warning can be independently controlled by +@option{-Wmissing-parameter-type}. @item An empty body occurs in an @samp{if} or @samp{else} statement. This @@ -3221,6 +3219,17 @@ types.) Warn if an old-style function definition is used. A warning is given even if there is a previous prototype. +@item -Wmissing-parameter-type @r{(C only)} +@opindex Wmissing-parameter-type +A function parameter is declared without a type specifier in K&R-style +functions: + +@smallexample +void foo(bar) @{ @} +@end smallexample + +This warning is also enabled by @option{-Wextra}. + @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 c452eb4..614ece9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2006-12-23 Manuel Lopez-Ibanez + + PR middle-end/7651 + * gcc.dg/Wmissing-parameter-type.c: New. + * gcc.dg/Wmissing-parameter-type-Wextra.c: New. + * gcc.dg/Wmissing-parameter-type-no.c: New. + 2006-12-22 Paul Thomas PR fortran/25818 diff --git a/gcc/testsuite/gcc.dg/Wmissing-parameter-type-Wextra.c b/gcc/testsuite/gcc.dg/Wmissing-parameter-type-Wextra.c new file mode 100644 index 0000000..37e1a57 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wmissing-parameter-type-Wextra.c @@ -0,0 +1,7 @@ +/* Test -Wmissing-parameter-type is enabled by -Wextra */ +/* { dg-do compile } */ +/* { dg-options "-Wextra" } */ + +int foo(bar) { return bar;} /* { dg-warning "type of 'bar' defaults to 'int'" } */ + + diff --git a/gcc/testsuite/gcc.dg/Wmissing-parameter-type-no.c b/gcc/testsuite/gcc.dg/Wmissing-parameter-type-no.c new file mode 100644 index 0000000..1031e57 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wmissing-parameter-type-no.c @@ -0,0 +1,7 @@ +/* Test that we can disable -Wmissing-parameter-type */ +/* { dg-do compile } */ +/* { dg-options "-Wall -Wextra -Wno-missing-parameter-type" } */ + +int foo(bar) { return bar;} /* { dg-bogus "type of 'bar' defaults to 'int'" } */ + + diff --git a/gcc/testsuite/gcc.dg/Wmissing-parameter-type.c b/gcc/testsuite/gcc.dg/Wmissing-parameter-type.c new file mode 100644 index 0000000..8ec94e2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wmissing-parameter-type.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-Wmissing-parameter-type" } */ + +int foo(bar) { return bar; } /* { dg-warning "type of 'bar' defaults to 'int'" } */ + + -- 2.7.4