2006-08-09 Alexandre Oliva * function.c (do_warn_unused_parameter): Do not issue warnings for declarations in system headers. 2006-02-22 Alexandre Oliva Backport and tweak: 2004-05-06 Jan Hubicka PR c/15004 * function.c (do_warn_unused_parameter): Break out form ... (expand_function_end): ... here. * function.h (do_warn_unused_parameter): Declare. 2006-02-22 Alexandre Oliva * decl2.c (finish_file): Issue warnings for unused parameters of functions not expanded. * g++.dg/Wunused-parm-1.C: New. --- gcc/cp/decl2.c.orig 2003-08-12 11:12:25.000000000 -0300 +++ gcc/cp/decl2.c 2006-08-09 16:59:09.000000000 -0300 @@ -3551,6 +3551,17 @@ finish_file () } while (reconsider); + if (warn_unused_parameter) + for (i = 0; i < deferred_fns_used; ++i) + { + tree decl = VARRAY_TREE (deferred_fns, i); + + /* Warn about unused parameters in functions we refrained from + synthesizing. */ + if (!TREE_ASM_WRITTEN (decl)) + do_warn_unused_parameter (decl); + } + /* We give C linkage to static constructors and destructors. */ push_lang_context (lang_name_c); --- gcc/function.c.orig 2003-10-31 08:42:15.000000000 -0200 +++ gcc/function.c 2006-08-10 00:28:06.000000000 -0300 @@ -6808,6 +6808,27 @@ use_return_register () diddle_return_value (do_use_return_reg, NULL); } +/* Warn about unused parms if extra warnings were specified. */ +/* Either ``-W -Wunused'' or ``-Wunused-parameter'' enables this + warning. WARN_UNUSED_PARAMETER is negative when set by + -Wunused. */ +void +do_warn_unused_parameter (tree fn) +{ + if (warn_unused_parameter > 0 + || (warn_unused_parameter < 0 && extra_warnings)) + { + tree decl; + + for (decl = DECL_ARGUMENTS (fn); + decl; decl = TREE_CHAIN (decl)) + if (! TREE_USED (decl) && TREE_CODE (decl) == PARM_DECL + && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl) + && ! DECL_IN_SYSTEM_HEADER (decl)) + warning_with_decl (decl, "unused parameter `%s'"); + } +} + /* Generate RTL for the end of the current function. FILENAME and LINE are the current position in the source file. @@ -6907,21 +6928,8 @@ expand_function_end (filename, line, end } } - /* Warn about unused parms if extra warnings were specified. */ - /* Either ``-W -Wunused'' or ``-Wunused-parameter'' enables this - warning. WARN_UNUSED_PARAMETER is negative when set by - -Wunused. */ - if (warn_unused_parameter > 0 - || (warn_unused_parameter < 0 && extra_warnings)) - { - tree decl; - - for (decl = DECL_ARGUMENTS (current_function_decl); - decl; decl = TREE_CHAIN (decl)) - if (! TREE_USED (decl) && TREE_CODE (decl) == PARM_DECL - && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl)) - warning_with_decl (decl, "unused parameter `%s'"); - } + if (warn_unused_parameter) + do_warn_unused_parameter (current_function_decl); /* Delete handlers for nonlocal gotos if nothing uses them. */ if (nonlocal_goto_handler_slots != 0 --- gcc/function.h.orig 2003-06-11 09:56:49.000000000 -0300 +++ gcc/function.h 2006-08-09 16:59:09.000000000 -0300 @@ -614,3 +614,5 @@ extern void init_virtual_regs PARAMS (( /* Called once, at initialization, to initialize function.c. */ extern void init_function_once PARAMS ((void)); + +extern void do_warn_unused_parameter PARAMS ((tree)); --- gcc/testsuite/g++.dg/warn/Wunused-parm-1.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc/testsuite/g++.dg/warn/Wunused-parm-1.C 2006-08-09 16:59:09.000000000 -0300 @@ -0,0 +1,27 @@ +// Test whether we issue warnings for unused parameters, even for +// inline functions that are not emitted (without optimization, we +// always emit them). +// { dg-do compile } +// { dg-options "-Wunused-parameter -O" } + +static inline int foo(int var) { // { dg-warning "unused parameter" } + return 0; +} + +static inline int foo2(int var) { // { dg-warning "unused parameter" } + return 0; +} + +static inline int bar(int var) { + return var; +} + +static inline int bar2(int var) { + return var; +} + +int main() { + foo (1); + bar (2); + return 0; +}