From 583713e3265924f3262ec66872bf7443bb980789 Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Fri, 20 Jan 2012 09:06:53 +0100 Subject: [PATCH] re PR fortran/51056 ([OOP] Bogus "Unused module variable '__vtab_domain_Domain_container'") 2012-01-20 Tobias Burnus Janus Weil PR fortran/51056 * module.c (load_needed, read_module): Don't mark __vtab etc. as use_only. 2012-01-20 Tobias Burnus Janus Weil PR fortran/51056 * gfortran.dg/use_21.f90: New. Co-Authored-By: Janus Weil From-SVN: r183326 --- gcc/fortran/ChangeLog | 7 ++++++ gcc/fortran/module.c | 16 +++++++++---- gcc/testsuite/ChangeLog | 6 +++++ gcc/testsuite/gfortran.dg/use_21.f90 | 35 ++++++++++++++++++++++++++++ 4 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/use_21.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index c3106a5e1b0..22828efefdc 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2012-01-20 Tobias Burnus + Janus Weil + + PR fortran/51056 + * module.c (load_needed, read_module): Don't mark __vtab etc. + as use_only. + 2012-01-19 Tobias Burnus PR fortran/51904 diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index 0616a8591f1..b2808d4d9d9 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -4351,7 +4351,11 @@ load_needed (pointer_info *p) mio_symbol (sym); sym->attr.use_assoc = 1; - if (only_flag) + + /* 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. */ + if (only_flag && sym->name[0] != '_' && sym->name[1] != '_') sym->attr.use_only = 1; if (p->u.rsym.renamed) sym->attr.use_rename = 1; @@ -4574,8 +4578,9 @@ read_module (void) p = name; /* Exception: Always import vtabs & vtypes. */ - if (p == NULL && (strncmp (name, "__vtab_", 5) == 0 - || strncmp (name, "__vtype_", 6) == 0)) + if (p == NULL && name[0] == '_' + && (strncmp (name, "__vtab_", 5) == 0 + || strncmp (name, "__vtype_", 6) == 0)) p = name; /* Skip symtree nodes not in an ONLY clause, unless there @@ -4641,7 +4646,10 @@ read_module (void) if (strcmp (name, p) != 0) sym->attr.use_rename = 1; - sym->attr.use_only = only_flag; + if (name[0] != '_' + || (strncmp (name, "__vtab_", 5) != 0 + && strncmp (name, "__vtype_", 6) != 0)) + sym->attr.use_only = only_flag; /* Store the symtree pointing to this symbol. */ info->u.rsym.symtree = st; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c1dd677c6bc..2d42abfb446 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2012-01-20 Tobias Burnus + Janus Weil + + PR fortran/51056 + * gfortran.dg/use_21.f90: New. + 2012-01-20 Jakub Jelinek PR target/51106 diff --git a/gcc/testsuite/gfortran.dg/use_21.f90 b/gcc/testsuite/gfortran.dg/use_21.f90 new file mode 100644 index 00000000000..eba412d9d78 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/use_21.f90 @@ -0,0 +1,35 @@ +! { dg-do compile } +! { dg-options "-Wall" } +! +! PR fortran/51056 +! +! Contributed by Kacper Kowalik +! +module domain + implicit none + private + public :: domain_container, dom + + type :: domain_container + integer :: D_x !< set to 1 when x-direction exists, 0 otherwise + contains + procedure :: init => init_domain_container + end type domain_container + + type(domain_container) :: dom + + contains + subroutine init_domain_container(this) + implicit none + class(domain_container), intent(inout) :: this + this%D_x = 0 + end subroutine init_domain_container +end module domain + +program ala + use domain, only: dom + implicit none + call dom%init +end program ala + +! { dg-final { cleanup-modules "domain" } }