re PR fortran/52668 (Incorrect unused warning for USE associating variable in common...
authorThomas Koenig <tkoenig@gcc.gnu.org>
Fri, 6 Apr 2012 18:31:11 +0000 (18:31 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Fri, 6 Apr 2012 18:31:11 +0000 (18:31 +0000)
2012-04-06  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/52668
* module.c:  Only mark symbols as use_only if they have been
imported via an only list.

2012-04-06  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/52668
* gfortran.dg/use_only_6.f90: New test.

From-SVN: r186199

gcc/fortran/ChangeLog
gcc/fortran/module.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/use_only_6.f90 [new file with mode: 0644]

index 4a79df8d1eff22077e91c1fb3ae37c961638e1fe..050f25e15fd7d4ff64e6a2197622a6c33b65e4a9 100644 (file)
@@ -1,3 +1,9 @@
+2012-04-06  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/52668
+       * module.c:  Only mark symbols as use_only if they have been
+       imported via an only list.
+
 2012-03-28  Paul Thomas  <pault@gcc.gnu.org>
        Tobias Burnus  <burnus@gcc.gnu.org>
 
@@ -5,7 +11,7 @@
        * match.c (gfc_match_allocate, gfc_match_deallocate): Change
        "not.. or" to "neither.. nor".
        * parse.c (decode_specification_statement): Correct error in
-       chpice of matching function for "allocatable". 
+       chpice of matching function for "allocatable".
 
 2012-03-23  Janne Blomqvist  <jb@gcc.gnu.org>
 
index 05ed2a2b9fd6ce21735530a9396109a52ffbb568..60a74cacca43277f1d308d7cab6bde9371bff03d 100644 (file)
@@ -4389,9 +4389,24 @@ load_needed (pointer_info *p)
 
   /* Mark as only or rename for later diagnosis for explicitly imported
      but not used warnings; don't mark internal symbols such as __vtab,
-     __def_init etc.  */
+     __def_init etc. Only mark them if they have been explicitly loaded.  */
+
   if (only_flag && sym->name[0] != '_' && sym->name[1] != '_')
-    sym->attr.use_only = 1;
+    {
+      gfc_use_rename *u;
+
+      /* Search the use/rename list for the variable; if the variable is
+        found, mark it.  */
+      for (u = gfc_rename_list; u; u = u->next)
+       {
+         if (strcmp (u->use_name, sym->name) == 0)
+           {
+             sym->attr.use_only = 1;
+             break;
+           }
+       }
+    }
+
   if (p->u.rsym.renamed)
     sym->attr.use_rename = 1;
 
index cd043f2c12d8b2ace721e29ab78924b85ba58511..3d6756089f54fbc67c03fd8c74eed2b5a76da184 100644 (file)
@@ -1,3 +1,12 @@
+2012-04-06  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/52668
+       * gfortran.dg/use_only_6.f90: New test.
+
+2012-04-06  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/52668
+       * gfortran.dg/use_only_6.f90: New test.
 2012-04-06  Mike Stump  <mikestump@comcast.net>
 
        PR testsuite/50722
diff --git a/gcc/testsuite/gfortran.dg/use_only_6.f90 b/gcc/testsuite/gfortran.dg/use_only_6.f90
new file mode 100644 (file)
index 0000000..bc15fdb
--- /dev/null
@@ -0,0 +1,13 @@
+! { dg-do compile }
+! PR 52668 - there used to be a bogus warning about not using b.
+! Original test case by Arnaud Desitter.
+module mm
+  integer :: a, b
+  common /mm1/ a, b
+end module mm
+
+subroutine aa()
+  use mm, only: a
+  implicit none
+  a = 1
+end subroutine aa