diff options
author | Janus Weil <janus@gcc.gnu.org> | 2011-10-07 16:40:14 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2011-10-07 16:40:14 +0200 |
commit | 58eba515913ec98edcf090389599ae25f4704ea1 (patch) | |
tree | b58b5a3ae62500a26783062c14befc760498b995 | |
parent | 14307a72de032f77c30f44486d570892268c5026 (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/fortran/class.c | 2 | ||||
-rw-r--r-- | gcc/fortran/module.c | 2 | ||||
-rw-r--r-- | gcc/fortran/trans-decl.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/class_46.f03 | 18 |
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" } } |