re PR c/4076 (-Wunused doesn't warn about static function only called by itself.)
authorManuel López-Ibáñez <manu@gcc.gnu.org>
Sat, 30 Jun 2007 12:56:43 +0000 (12:56 +0000)
committerManuel López-Ibáñez <manu@gcc.gnu.org>
Sat, 30 Jun 2007 12:56:43 +0000 (12:56 +0000)
2007-06-30  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>

PR c/4076
* c-typeck.c (build_external_ref): Don't mark as used if called
from itself.
* calls.c (rtx_for_function_call): Likewise.

testsuite/
* gcc.dg/Wunused-function.c: New.

From-SVN: r126144

gcc/ChangeLog
gcc/c-typeck.c
gcc/calls.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/Wunused-function.c [new file with mode: 0644]

index 7a9af4b229bd26e01a1aa63065cbe3bff1e52d55..104942acd5991ace39140643ebfb5e67d5a4dc2c 100644 (file)
@@ -1,3 +1,10 @@
+2007-06-30  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
+
+       PR c/4076
+       * c-typeck.c (build_external_ref): Don't mark as used if called
+       from itself.
+       * calls.c (rtx_for_function_call): Likewise.
+       
 2007-06-30  Richard Sandiford  <richard@codesourcery.com>
 
        Revert:
index 2a19f0875fb571b11048217b0b3bd344796fc924..0793b6005acc604b68b4d82e86eecb924052afe8 100644 (file)
@@ -2090,9 +2090,13 @@ build_external_ref (tree id, int fun, location_t loc)
   if (TREE_DEPRECATED (ref))
     warn_deprecated_use (ref);
 
-  if (!skip_evaluation)
-    assemble_external (ref);
-  TREE_USED (ref) = 1;
+  /* Recursive call does not count as usage.  */
+  if (ref != current_function_decl) 
+    {
+      if (!skip_evaluation)
+       assemble_external (ref);
+      TREE_USED (ref) = 1;
+    }
 
   if (TREE_CODE (ref) == FUNCTION_DECL && !in_alignof)
     {
index 868edfc396d8f4f2b12c40c8d5f3fef7d9887e0c..aa63755d26d0a074929ac2b90dff4597bf0eeb42 100644 (file)
@@ -1493,7 +1493,7 @@ rtx_for_function_call (tree fndecl, tree addr)
     {
       /* If this is the first use of the function, see if we need to
         make an external definition for it.  */
-      if (! TREE_USED (fndecl))
+      if (!TREE_USED (fndecl) && fndecl != current_function_decl)
        {
          assemble_external (fndecl);
          TREE_USED (fndecl) = 1;
index e848e23f05b33aeda8aff4e032a5d51ea4ee82e5..5367e3f1028d1471b85d56b9ada4f3e8002b0fba 100644 (file)
@@ -1,3 +1,8 @@
+2007-06-30  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
+
+       PR c/4076
+       * gcc.dg/Wunused-function.c: New.
+       
 2007-06-29  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        * gfortran.fortran-torture/compile/inline_1.f90: Fix test.
diff --git a/gcc/testsuite/gcc.dg/Wunused-function.c b/gcc/testsuite/gcc.dg/Wunused-function.c
new file mode 100644 (file)
index 0000000..1c59c50
--- /dev/null
@@ -0,0 +1,6 @@
+/* PR c/4076  -Wunused doesn't warn about static function only called by itself.  */
+/* { dg-do compile } */
+/* { dg-options "-Wunused-function" } */
+
+static void foo (void) {} /* { dg-warning "'foo' defined but not used" } */
+static void bar (void) { bar (); } /* { dg-warning "'bar' defined but not used" } */