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 <[email protected]>
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 <[email protected]>
PR fortran/52668
* gfortran.dg/use_only_6.f90: New test.
Index: module.c
===================================================================
--- module.c (Revision 184854)
+++ module.c (Arbeitskopie)
@@ -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;
! { 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" } }