diff options
author | Janus Weil <janus@gcc.gnu.org> | 2010-12-28 22:21:53 +0100 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2010-12-28 22:21:53 +0100 |
commit | 9367d533746bca66659395d2af95bc2280b4037f (patch) | |
tree | ef1a0d52bc663adbbcc30a82ca40a9876687b8dd | |
parent | 040d39eef25ebe7192023c3aa1ddda9858ea3135 (diff) | |
download | gcc-9367d533746bca66659395d2af95bc2280b4037f.zip gcc-9367d533746bca66659395d2af95bc2280b4037f.tar.gz gcc-9367d533746bca66659395d2af95bc2280b4037f.tar.bz2 |
re PR fortran/45827 ([OOP] mio_component_ref(): Component not found)
2010-12-28 Janus Weil <janus@gcc.gnu.org>
Daniel Franke <dfranke@gcc.gnu.org>
PR fortran/45827
* module.c (mio_component_ref): Handle components of CLASS variables.
2010-12-28 Janus Weil <janus@gcc.gnu.org>
PR fortran/45827
* gfortran.dg/class_32.f90: New.
Co-Authored-By: Daniel Franke <dfranke@gcc.gnu.org>
From-SVN: r168302
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/module.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/class_32.f90 | 41 |
4 files changed, 55 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 450d1df..e998899 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2010-12-28 Janus Weil <janus@gcc.gnu.org> + Daniel Franke <dfranke@gcc.gnu.org> + + PR fortran/45827 + * module.c (mio_component_ref): Handle components of CLASS variables. + 2010-12-27 Thomas Koenig <tkoenig@gcc.gnu.org> * dump-parse-tree.c (show_typespec): Also show character kind. diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index f10e43b..f75e3fd 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -2311,6 +2311,9 @@ mio_component_ref (gfc_component **cp, gfc_symbol *sym) { mio_internal_string (name); + if (sym && sym->attr.is_class) + sym = sym->components->ts.u.derived; + /* It can happen that a component reference can be read before the associated derived type symbol has been loaded. Return now and wait for a later iteration of load_needed. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 91d1c11..29ffa84 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-12-28 Janus Weil <janus@gcc.gnu.org> + + PR fortran/45827 + * gfortran.dg/class_32.f90: New. + 2010-12-28 H.J. Lu <hongjiu.lu@intel.com> * gcc.target/i386/rdrand-1.c: Updated. diff --git a/gcc/testsuite/gfortran.dg/class_32.f90 b/gcc/testsuite/gfortran.dg/class_32.f90 new file mode 100644 index 0000000..b5857c1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_32.f90 @@ -0,0 +1,41 @@ +! { dg-do compile } +! +! PR 45827: [4.6 Regression] [OOP] mio_component_ref(): Component not found +! +! Contributed by Daniel Franke <dfranke@gcc.gnu.org> + +MODULE m + + TYPE, ABSTRACT :: t + PRIVATE + INTEGER :: n + CONTAINS + PROCEDURE :: get + END TYPE + + ABSTRACT INTERFACE + SUBROUTINE create(this) + IMPORT t + CLASS(t) :: this + END SUBROUTINE + END INTERFACE + +CONTAINS + + FUNCTION get(this) + CLASS(t) :: this + REAL, DIMENSION(this%n) :: get + END FUNCTION + + SUBROUTINE destroy(this) + CLASS(t) :: this + END SUBROUTINE + +END MODULE + + +PROGRAM p + USE m +END + +! { dg-final { cleanup-modules "m" } } |