2007-06-30 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
authormanu <manu@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 30 Jun 2007 12:56:43 +0000 (12:56 +0000)
committermanu <manu@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 30 Jun 2007 12:56:43 +0000 (12:56 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@126144 138bc75d-0d04-0410-961f-82ee72b054a4

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 7a9af4b..104942a 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 2a19f08..0793b60 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 868edfc..aa63755 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 e848e23..5367e3f 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" } */