public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/54997] New: -Wunused-function gives false warnings for procedures passed as actual argument
@ 2012-10-20  8:50 janus at gcc dot gnu.org
  2012-10-20  8:58 ` [Bug fortran/54997] " janus at gcc dot gnu.org
                   ` (9 more replies)
  0 siblings, 10 replies; 11+ messages in thread
From: janus at gcc dot gnu.org @ 2012-10-20  8:50 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54997

             Bug #: 54997
           Summary: -Wunused-function gives false warnings for procedures
                    passed as actual argument
    Classification: Unclassified
           Product: gcc
           Version: 4.8.0
            Status: UNCONFIRMED
          Keywords: diagnostic
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: janus@gcc.gnu.org


Follow-up to PR54224:


module m

  implicit none
  private :: s2,s3

contains

  subroutine s1
    call s2(s3)
  end subroutine

  subroutine s2(dummy)
    procedure() :: dummy
  end subroutine

  subroutine s3()
  end subroutine

end module


When compiled with -Wunused-function, this gives:

warning: ‘s3’ defined but not used [-Wunused-function]
   subroutine s3()


Obviously s3 is not being called directly, but it is passed to s2, so it's
certainly not unused.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug fortran/54997] -Wunused-function gives false warnings for procedures passed as actual argument
  2012-10-20  8:50 [Bug fortran/54997] New: -Wunused-function gives false warnings for procedures passed as actual argument janus at gcc dot gnu.org
@ 2012-10-20  8:58 ` janus at gcc dot gnu.org
  2012-10-20  9:03 ` janus at gcc dot gnu.org
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: janus at gcc dot gnu.org @ 2012-10-20  8:58 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54997

--- Comment #1 from janus at gcc dot gnu.org 2012-10-20 08:58:19 UTC ---
(In reply to comment #0)
> Obviously s3 is not being called directly, but it is passed to s2, so it's
> certainly not unused.

Well, to be honest, 'dummy' is not really used inside of 's2', but you can just
add some line like this

    call dummy()

which does not make the false warning go away either.


[Of course, diagnosing that 's3' is never actually called in the original test
case is not quite trivial in general, and it is not what this PR is aiming
for.]


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug fortran/54997] -Wunused-function gives false warnings for procedures passed as actual argument
  2012-10-20  8:50 [Bug fortran/54997] New: -Wunused-function gives false warnings for procedures passed as actual argument janus at gcc dot gnu.org
  2012-10-20  8:58 ` [Bug fortran/54997] " janus at gcc dot gnu.org
@ 2012-10-20  9:03 ` janus at gcc dot gnu.org
  2012-10-20 18:45 ` janus at gcc dot gnu.org
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: janus at gcc dot gnu.org @ 2012-10-20  9:03 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54997

--- Comment #2 from janus at gcc dot gnu.org 2012-10-20 09:03:30 UTC ---
(In reply to comment #0)
>   subroutine s2(dummy)
>     procedure() :: dummy
>   end subroutine


Also an "Unused dummy argument" warning is missing here ...


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug fortran/54997] -Wunused-function gives false warnings for procedures passed as actual argument
  2012-10-20  8:50 [Bug fortran/54997] New: -Wunused-function gives false warnings for procedures passed as actual argument janus at gcc dot gnu.org
  2012-10-20  8:58 ` [Bug fortran/54997] " janus at gcc dot gnu.org
  2012-10-20  9:03 ` janus at gcc dot gnu.org
@ 2012-10-20 18:45 ` janus at gcc dot gnu.org
  2012-10-20 21:46 ` janus at gcc dot gnu.org
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: janus at gcc dot gnu.org @ 2012-10-20 18:45 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54997

--- Comment #3 from janus at gcc dot gnu.org 2012-10-20 18:45:05 UTC ---
(In reply to comment #2)
> Also an "Unused dummy argument" warning is missing here ...

This is fixed by the following patch:

Index: gcc/fortran/decl.c
===================================================================
--- gcc/fortran/decl.c    (revision 192619)
+++ gcc/fortran/decl.c    (working copy)
@@ -4941,8 +4941,6 @@ match_procedure_decl (void)

     }

-      gfc_set_sym_referenced (sym);
-
       if (gfc_match_eos () == MATCH_YES)
     return MATCH_YES;
       if (gfc_match_char (',') != MATCH_YES)


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug fortran/54997] -Wunused-function gives false warnings for procedures passed as actual argument
  2012-10-20  8:50 [Bug fortran/54997] New: -Wunused-function gives false warnings for procedures passed as actual argument janus at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2012-10-20 18:45 ` janus at gcc dot gnu.org
@ 2012-10-20 21:46 ` janus at gcc dot gnu.org
  2012-10-21 13:48 ` janus at gcc dot gnu.org
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: janus at gcc dot gnu.org @ 2012-10-20 21:46 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54997

--- Comment #4 from janus at gcc dot gnu.org 2012-10-20 21:46:12 UTC ---
The following removes the warning for s3:


Index: gcc/fortran/trans-decl.c
===================================================================
--- gcc/fortran/trans-decl.c    (revision 192619)
+++ gcc/fortran/trans-decl.c    (working copy)
@@ -1854,6 +1854,9 @@ build_function_decl (gfc_symbol * sym, bool global
          || sym->attr.public_used))
     TREE_PUBLIC (fndecl) = 1;

+  if (sym->attr.referenced)
+    TREE_USED (fndecl) = 1;
+
   attributes = add_attributes_to_decl (attr, NULL_TREE);
   decl_attributes (&fndecl, attributes, 0);



but it also removes the warning on procedures which are really unused :(


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug fortran/54997] -Wunused-function gives false warnings for procedures passed as actual argument
  2012-10-20  8:50 [Bug fortran/54997] New: -Wunused-function gives false warnings for procedures passed as actual argument janus at gcc dot gnu.org
                   ` (3 preceding siblings ...)
  2012-10-20 21:46 ` janus at gcc dot gnu.org
@ 2012-10-21 13:48 ` janus at gcc dot gnu.org
  2012-10-22 12:58 ` [Bug fortran/54997] [4.8 Regression] -Wunused-function gives false warnings janus at gcc dot gnu.org
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: janus at gcc dot gnu.org @ 2012-10-21 13:48 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54997

--- Comment #5 from janus at gcc dot gnu.org 2012-10-21 13:48:38 UTC ---
(In reply to comment #4)
> The following removes the warning for s3:
> 
> [...]
> 
> but it also removes the warning on procedures which are really unused :(

This fixed by the following:

Index: gcc/fortran/parse.c
===================================================================
--- gcc/fortran/parse.c    (revision 192619)
+++ gcc/fortran/parse.c    (working copy)
@@ -3928,7 +3928,6 @@ gfc_fixup_sibling_symbols (gfc_symbol *sym, gfc_na
   gfc_symtree *st;
   gfc_symbol *old_sym;

-  sym->attr.referenced = 1;
   for (ns = siblings; ns; ns = ns->sibling)
     {
       st = gfc_find_symtree (ns->sym_root, sym->name);
@@ -4050,7 +4049,6 @@ parse_contained (int module)
       /* Mark this as a contained function, so it isn't replaced
          by other module functions.  */
       sym->attr.contained = 1;
-      sym->attr.referenced = 1;

       /* Set implicit_pure so that it can be reset if any of the
          tests for purity fail.  This is used for some optimisation


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug fortran/54997] [4.8 Regression] -Wunused-function gives false warnings
  2012-10-20  8:50 [Bug fortran/54997] New: -Wunused-function gives false warnings for procedures passed as actual argument janus at gcc dot gnu.org
                   ` (4 preceding siblings ...)
  2012-10-21 13:48 ` janus at gcc dot gnu.org
@ 2012-10-22 12:58 ` janus at gcc dot gnu.org
  2012-11-07 11:36 ` jakub at gcc dot gnu.org
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: janus at gcc dot gnu.org @ 2012-10-22 12:58 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54997

janus at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|-Wunused-function gives     |[4.8 Regression]
                   |false warnings for          |-Wunused-function gives
                   |procedures passed as actual |false warnings
                   |argument                    |

--- Comment #6 from janus at gcc dot gnu.org 2012-10-22 12:58:48 UTC ---
First, I forgot to mention that the behavior described in comment 0 is a 4.8
regression.

Second, there is another case which still gives bogus warnings (also a
regression), and that is ENTRY:


subroutine sub
entry en
end subroutine


Compiling this with -Wunused-function yields:

warning: ‘master.0.sub’ defined but not used [-Wunused-function]
 subroutine sub
 ^


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug fortran/54997] [4.8 Regression] -Wunused-function gives false warnings
  2012-10-20  8:50 [Bug fortran/54997] New: -Wunused-function gives false warnings for procedures passed as actual argument janus at gcc dot gnu.org
                   ` (5 preceding siblings ...)
  2012-10-22 12:58 ` [Bug fortran/54997] [4.8 Regression] -Wunused-function gives false warnings janus at gcc dot gnu.org
@ 2012-11-07 11:36 ` jakub at gcc dot gnu.org
  2012-11-07 17:59 ` janus at gcc dot gnu.org
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: jakub at gcc dot gnu.org @ 2012-11-07 11:36 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54997

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P4
                 CC|                            |jakub at gcc dot gnu.org
   Target Milestone|---                         |4.8.0


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug fortran/54997] [4.8 Regression] -Wunused-function gives false warnings
  2012-10-20  8:50 [Bug fortran/54997] New: -Wunused-function gives false warnings for procedures passed as actual argument janus at gcc dot gnu.org
                   ` (6 preceding siblings ...)
  2012-11-07 11:36 ` jakub at gcc dot gnu.org
@ 2012-11-07 17:59 ` janus at gcc dot gnu.org
  2012-11-26 11:16 ` janus at gcc dot gnu.org
  2012-11-26 11:23 ` janus at gcc dot gnu.org
  9 siblings, 0 replies; 11+ messages in thread
From: janus at gcc dot gnu.org @ 2012-11-07 17:59 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54997

janus at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |ASSIGNED
   Last reconfirmed|                            |2012-11-07
         AssignedTo|unassigned at gcc dot       |janus at gcc dot gnu.org
                   |gnu.org                     |
     Ever Confirmed|0                           |1

--- Comment #7 from janus at gcc dot gnu.org 2012-11-07 17:58:48 UTC ---
A patch was posted here:

http://gcc.gnu.org/ml/fortran/2012-10/msg00109.html


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug fortran/54997] [4.8 Regression] -Wunused-function gives false warnings
  2012-10-20  8:50 [Bug fortran/54997] New: -Wunused-function gives false warnings for procedures passed as actual argument janus at gcc dot gnu.org
                   ` (7 preceding siblings ...)
  2012-11-07 17:59 ` janus at gcc dot gnu.org
@ 2012-11-26 11:16 ` janus at gcc dot gnu.org
  2012-11-26 11:23 ` janus at gcc dot gnu.org
  9 siblings, 0 replies; 11+ messages in thread
From: janus at gcc dot gnu.org @ 2012-11-26 11:16 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54997

--- Comment #8 from janus at gcc dot gnu.org 2012-11-26 11:16:35 UTC ---
Author: janus
Date: Mon Nov 26 11:16:31 2012
New Revision: 193811

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=193811
Log:
2012-11-26  Janus Weil  <janus@gcc.gnu.org>

    PR fortran/54997
    * decl.c (match_procedure_decl): Don't set 'referenced' attribute
    for PROCEDURE declarations.
    * parse.c (gfc_fixup_sibling_symbols,parse_contained): Don't set
    'referenced' attribute for all contained procedures.
    * trans-decl.c (gfc_get_symbol_decl): Allow for unreferenced procedures.
    (build_function_decl): Set TREE_USED for referenced procedures.

2012-11-26  Janus Weil  <janus@gcc.gnu.org>

    PR fortran/54997
    * gfortran.dg/warn_unused_function_2.f90: New.

Added:
    trunk/gcc/testsuite/gfortran.dg/warn_unused_function_2.f90
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/decl.c
    trunk/gcc/fortran/parse.c
    trunk/gcc/fortran/trans-decl.c
    trunk/gcc/testsuite/ChangeLog


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug fortran/54997] [4.8 Regression] -Wunused-function gives false warnings
  2012-10-20  8:50 [Bug fortran/54997] New: -Wunused-function gives false warnings for procedures passed as actual argument janus at gcc dot gnu.org
                   ` (8 preceding siblings ...)
  2012-11-26 11:16 ` janus at gcc dot gnu.org
@ 2012-11-26 11:23 ` janus at gcc dot gnu.org
  9 siblings, 0 replies; 11+ messages in thread
From: janus at gcc dot gnu.org @ 2012-11-26 11:23 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54997

janus at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|                            |FIXED

--- Comment #9 from janus at gcc dot gnu.org 2012-11-26 11:22:59 UTC ---
Fixed with r193811. Closing.


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2012-11-26 11:23 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-20  8:50 [Bug fortran/54997] New: -Wunused-function gives false warnings for procedures passed as actual argument janus at gcc dot gnu.org
2012-10-20  8:58 ` [Bug fortran/54997] " janus at gcc dot gnu.org
2012-10-20  9:03 ` janus at gcc dot gnu.org
2012-10-20 18:45 ` janus at gcc dot gnu.org
2012-10-20 21:46 ` janus at gcc dot gnu.org
2012-10-21 13:48 ` janus at gcc dot gnu.org
2012-10-22 12:58 ` [Bug fortran/54997] [4.8 Regression] -Wunused-function gives false warnings janus at gcc dot gnu.org
2012-11-07 11:36 ` jakub at gcc dot gnu.org
2012-11-07 17:59 ` janus at gcc dot gnu.org
2012-11-26 11:16 ` janus at gcc dot gnu.org
2012-11-26 11:23 ` janus at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).