aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorManuel López-Ibáñez <manu@gcc.gnu.org>2007-06-30 12:56:43 +0000
committerManuel López-Ibáñez <manu@gcc.gnu.org>2007-06-30 12:56:43 +0000
commitad960f56f2e381290d1a83b0ee2f1d7b0e9d3a97 (patch)
tree6cf59c10b1848193cc5f27b945729e4c00add85d /gcc
parenta4fbe84bd2ae7c5cacbada14abe4d3b9a7bbe6d0 (diff)
downloadgcc-ad960f56f2e381290d1a83b0ee2f1d7b0e9d3a97.zip
gcc-ad960f56f2e381290d1a83b0ee2f1d7b0e9d3a97.tar.gz
gcc-ad960f56f2e381290d1a83b0ee2f1d7b0e9d3a97.tar.bz2
re PR c/4076 (-Wunused doesn't warn about static function only called by itself.)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/c-typeck.c10
-rw-r--r--gcc/calls.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/Wunused-function.c6
5 files changed, 26 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7a9af4b..104942a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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:
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index 2a19f08..0793b60 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -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)
{
diff --git a/gcc/calls.c b/gcc/calls.c
index 868edfc..aa63755 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -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;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e848e23..5367e3f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..1c59c50
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wunused-function.c
@@ -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" } */