On Wed, Jan 27, 2016 at 12:28:58PM -0700, Jeff Law wrote: > On 01/27/2016 11:51 AM, Jakub Jelinek wrote: > >2016-01-25 Jakub Jelinek <ja...@redhat.com> > > > > PR debug/66869 > > * c-decl.c (c_write_global_declarations_1): Warn with > > warn_unused_function if static prototype without definition > > is not C_DECL_USED. > > > > * gcc.dg/pr66869.c: New test.
And here is corresponding C++ FE patch. Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2016-01-28 Jakub Jelinek <ja...@redhat.com> PR debug/66869 * decl.c (wrapup_globals_for_namespace): Warn about unused static function declarations. * g++.dg/warn/Wunused-function2.C: New test. --- gcc/cp/decl.c.jj 2016-01-25 09:31:01.000000000 +0100 +++ gcc/cp/decl.c 2016-01-28 13:14:10.783286136 +0100 @@ -879,6 +879,24 @@ wrapup_globals_for_namespace (tree name_ tree *vec = statics->address (); int len = statics->length (); + if (warn_unused_function) + { + tree decl; + unsigned int i; + FOR_EACH_VEC_SAFE_ELT (statics, i, decl) + if (TREE_CODE (decl) == FUNCTION_DECL + && DECL_INITIAL (decl) == 0 + && DECL_EXTERNAL (decl) + && !TREE_PUBLIC (decl) + && !DECL_ARTIFICIAL (decl) + && !TREE_NO_WARNING (decl)) + { + warning (OPT_Wunused_function, + "%q+F declared %<static%> but never defined", decl); + TREE_NO_WARNING (decl) = 1; + } + } + /* Write out any globals that need to be output. */ return wrapup_global_declarations (vec, len); } --- gcc/testsuite/g++.dg/warn/Wunused-function2.C.jj 2016-01-28 13:40:10.201053364 +0100 +++ gcc/testsuite/g++.dg/warn/Wunused-function2.C 2016-01-28 13:41:43.006788487 +0100 @@ -0,0 +1,6 @@ +// PR debug/66869 +// { dg-do compile } +// { dg-options "-Wunused-function" } + +static void test (void); // { dg-warning "'void test..' declared 'static' but never defined" } +int i; Jakub