diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/c-typeck.c | 10 | ||||
-rw-r--r-- | gcc/calls.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/Wunused-function.c | 6 |
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" } */ |