aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2011-10-07 16:40:14 +0200
committerJanus Weil <janus@gcc.gnu.org>2011-10-07 16:40:14 +0200
commit58eba515913ec98edcf090389599ae25f4704ea1 (patch)
treeb58b5a3ae62500a26783062c14befc760498b995
parent14307a72de032f77c30f44486d570892268c5026 (diff)
downloadgcc-58eba515913ec98edcf090389599ae25f4704ea1.zip
gcc-58eba515913ec98edcf090389599ae25f4704ea1.tar.gz
gcc-58eba515913ec98edcf090389599ae25f4704ea1.tar.bz2
re PR fortran/50625 ([OOP] ALLOCATABLE attribute lost for module CLASS variables)
2011-10-07 Janus Weil <janus@gcc.gnu.org> PR fortran/50625 * class.c (gfc_build_class_symbol): Fix whitespace. * module.c (mio_symbol): Set 'class_ok' attribute. * trans-decl.c (gfc_get_symbol_decl): Make sure the backend_decl has been built for class symbols. 2011-10-07 Janus Weil <janus@gcc.gnu.org> PR fortran/50625 * gfortran.dg/class_46.f03: New. From-SVN: r179660
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/class.c2
-rw-r--r--gcc/fortran/module.c2
-rw-r--r--gcc/fortran/trans-decl.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/class_46.f0318
6 files changed, 38 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 23053c4..f5fc071 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,11 @@
+2011-10-07 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/50625
+ * class.c (gfc_build_class_symbol): Fix whitespace.
+ * module.c (mio_symbol): Set 'class_ok' attribute.
+ * trans-decl.c (gfc_get_symbol_decl): Make sure the backend_decl has
+ been built for class symbols.
+
2011-10-04 Janus Weil <janus@gcc.gnu.org>
PR fortran/35831
diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c
index 572011f..f64cc1b 100644
--- a/gcc/fortran/class.c
+++ b/gcc/fortran/class.c
@@ -188,7 +188,7 @@ gfc_build_class_symbol (gfc_typespec *ts, symbol_attribute *attr,
/* Class container has already been built. */
return SUCCESS;
- attr->class_ok = attr->dummy || attr->pointer || attr->allocatable;
+ attr->class_ok = attr->dummy || attr->pointer || attr->allocatable;
if (!attr->class_ok)
/* We can not build the class container yet. */
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index b29ba4b..c8a377d 100644
--- a/gcc/fortran/module.c
+++ b/gcc/fortran/module.c
@@ -3608,6 +3608,8 @@ mio_symbol (gfc_symbol *sym)
mio_symbol_attribute (&sym->attr);
mio_typespec (&sym->ts);
+ if (sym->ts.type == BT_CLASS)
+ sym->attr.class_ok = 1;
if (iomode == IO_OUTPUT)
mio_namespace_ref (&sym->formal_ns);
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index 44363c2..4526aaa 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -1179,7 +1179,10 @@ gfc_get_symbol_decl (gfc_symbol * sym)
{
gfc_component *c = CLASS_DATA (sym);
if (!c->ts.u.derived->backend_decl)
- gfc_find_derived_vtab (c->ts.u.derived);
+ {
+ gfc_find_derived_vtab (c->ts.u.derived);
+ gfc_get_derived_type (sym->ts.u.derived);
+ }
}
/* All deferred character length procedures need to retain the backend
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 92ae8b3..af8d164 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-10-07 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/50625
+ * gfortran.dg/class_46.f03: New.
+
2011-10-06 Joern Rennecke <joern.rennecke@embecosm.com>
* gcc.dg/pr47276.c (ASMNAME, ASMNAME2, STRING): Define.
diff --git a/gcc/testsuite/gfortran.dg/class_46.f03 b/gcc/testsuite/gfortran.dg/class_46.f03
new file mode 100644
index 0000000..4719c25
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/class_46.f03
@@ -0,0 +1,18 @@
+! { dg-do run }
+!
+! PR 50625: [4.6/4.7 Regression][OOP] ALLOCATABLE attribute lost for module CLASS variables
+!
+! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
+
+module m
+type t
+end type t
+class(t), allocatable :: x
+end module m
+
+use m
+implicit none
+if (allocated(x)) call abort()
+end
+
+! { dg-final { cleanup-modules "m" } }