aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2012-01-20 09:06:53 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2012-01-20 09:06:53 +0100
commit583713e3265924f3262ec66872bf7443bb980789 (patch)
tree78b20c12b8b0801d546cbac716a126d087b66479 /gcc
parent229bfbcff33bdf293029dd4990b96eb77af2f55a (diff)
downloadgcc-583713e3265924f3262ec66872bf7443bb980789.zip
gcc-583713e3265924f3262ec66872bf7443bb980789.tar.gz
gcc-583713e3265924f3262ec66872bf7443bb980789.tar.bz2
re PR fortran/51056 ([OOP] Bogus "Unused module variable '__vtab_domain_Domain_container'")
2012-01-20 Tobias Burnus <burnus@net-b.de> Janus Weil <janus@gcc.gnu.org> PR fortran/51056 * module.c (load_needed, read_module): Don't mark __vtab etc. as use_only. 2012-01-20 Tobias Burnus <burnus@net-b.de> Janus Weil <janus@gcc.gnu.org> PR fortran/51056 * gfortran.dg/use_21.f90: New. Co-Authored-By: Janus Weil <janus@gcc.gnu.org> From-SVN: r183326
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/module.c16
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/use_21.f9035
4 files changed, 60 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index c3106a5..22828ef 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2012-01-20 Tobias Burnus <burnus@net-b.de>
+ Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/51056
+ * module.c (load_needed, read_module): Don't mark __vtab etc.
+ as use_only.
+
2012-01-19 Tobias Burnus <burnus@net-b.de>
PR fortran/51904
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index 0616a85..b2808d4 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 c1dd677..2d42abf 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2012-01-20 Tobias Burnus <burnus@net-b.de>
+ Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/51056
+ * gfortran.dg/use_21.f90: New.
+
2012-01-20 Jakub Jelinek <jakub@redhat.com>
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 0000000..eba412d
--- /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" } }