re PR fortran/55352 (Erroneous gfortran warning of unused module variable when variab...
authorJanus Weil <janus@gcc.gnu.org>
Wed, 21 Nov 2012 22:19:51 +0000 (23:19 +0100)
committerJanus Weil <janus@gcc.gnu.org>
Wed, 21 Nov 2012 22:19:51 +0000 (23:19 +0100)
2012-11-21  Janus Weil  <janus@gcc.gnu.org>

PR fortran/55352
* trans-decl.c (generate_local_decl): Don't warn for explicitly imported
but unused module variables which are in a namelist or common block.

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

PR fortran/55352
* gfortran.dg/namelist_76.f90: New.

From-SVN: r193711

gcc/fortran/ChangeLog
gcc/fortran/trans-decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/namelist_76.f90 [new file with mode: 0644]

index d53bf1ae6cd1304e2855a4f8393854b9dab2cc41..3b5b27c020ef7ff975ce576a43b04e8a19431cf6 100644 (file)
@@ -1,3 +1,9 @@
+2012-11-21  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/55352
+       * trans-decl.c (generate_local_decl): Don't warn for explicitly imported
+       but unused module variables which are in a namelist or common block.
+
 2012-11-20  Diego Novillo  <dnovillo@google.com>
            Jakub Jelinek  <jakub@redhat.com>
 
index c661fb358ac56eb72c796c4e81c812e8914fc942..6827298b86efd37fb4eb52e90899f84144e39b19 100644 (file)
@@ -4589,22 +4589,25 @@ generate_local_decl (gfc_symbol * sym)
        }
 
       /* Warn for unused variables, but not if they're inside a common
-        block, a namelist, or are use-associated.  */
+        block or a namelist.  */
       else if (warn_unused_variable
-              && !(sym->attr.in_common || sym->attr.use_assoc || sym->mark
-                   || sym->attr.in_namelist))
+              && !(sym->attr.in_common || sym->mark || sym->attr.in_namelist))
        {
-         gfc_warning ("Unused variable '%s' declared at %L", sym->name,
-                      &sym->declared_at);
-         if (sym->backend_decl != NULL_TREE)
-           TREE_NO_WARNING(sym->backend_decl) = 1;
-       }
-      else if (warn_unused_variable && sym->attr.use_only)
-       {
-         gfc_warning ("Unused module variable '%s' which has been explicitly "
-                      "imported at %L", sym->name, &sym->declared_at);
-         if (sym->backend_decl != NULL_TREE)
-           TREE_NO_WARNING(sym->backend_decl) = 1;
+         if (sym->attr.use_only)
+           {
+             gfc_warning ("Unused module variable '%s' which has been "
+                          "explicitly imported at %L", sym->name,
+                          &sym->declared_at);
+             if (sym->backend_decl != NULL_TREE)
+               TREE_NO_WARNING(sym->backend_decl) = 1;
+           }
+         else if (!sym->attr.use_assoc)
+           {
+             gfc_warning ("Unused variable '%s' declared at %L",
+                          sym->name, &sym->declared_at);
+             if (sym->backend_decl != NULL_TREE)
+               TREE_NO_WARNING(sym->backend_decl) = 1;
+           }
        }
 
       /* For variable length CHARACTER parameters, the PARM_DECL already
index 3a12c817764cb2db23c7b28e6cba672f619e7c95..cb52cdc5afededeb9db9777fe349eb4df776e367 100644 (file)
@@ -1,3 +1,8 @@
+2012-11-21  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/55352
+       * gfortran.dg/namelist_76.f90: New.
+
 2012-11-21  Martin Jambor  <mjambor@suse.cz>
 
        * gcc.dg/ipa/ipcp-agg-7.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/namelist_76.f90 b/gcc/testsuite/gfortran.dg/namelist_76.f90
new file mode 100644 (file)
index 0000000..acb3b2f
--- /dev/null
@@ -0,0 +1,28 @@
+! { dg-do compile }
+!
+! PR 55352: [4.7/4.8 Regression] Erroneous gfortran warning of unused module variable when variable is only used in namelist
+!
+! Contributed by <AstroFloyd@gmail.com>
+
+module data
+  implicit none
+  integer :: a
+end module data
+
+program test
+  use data, only: a
+  implicit none
+  a = 1
+  call write_data()
+end program test
+
+subroutine write_data()
+  use data, only: a
+  implicit none
+  namelist /write_data_list/ a
+  open(unit=10,form='formatted',status='replace',action='write',file='test.dat')
+  write(10, nml=write_data_list)
+  close(10)
+end subroutine write_data
+
+! { dg-final { cleanup-modules "data" } }