Comments
Patch
===================================================================
@@ -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;
Hello world, this fixes a 4.7/4.8 regression with a bogus warning for variables which were excluded from being imported by "use, only" if they were in a common block inside the module. Regression-tested. OK for trunk and for 4.7 after a few days? Thomas 2012-03-25 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-25 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/52668 * gfortran.dg/use_only_6.f90: New test. ! { 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 ! { dg-final { cleanup-modules "mm" } }