diff options
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/finalize_27.f90 | 25 |
4 files changed, 38 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index ce6857e..53d2691 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,10 @@ 2014-08-17 Tobias Burnus <burnus@net-b.de> + * resolve.c (gfc_resolve_finalizers): Ensure that parents are + resolved first. + +2014-08-17 Tobias Burnus <burnus@net-b.de> + * trans-io.c (gfc_build_io_library_fndecls): Fix decl of IOCALL_SET_NML_VAL. (transfer_namelist_element): Use proper int type as argument. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index ea28ef4..32ff9dd 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -11416,6 +11416,10 @@ gfc_resolve_finalizers (gfc_symbol* derived, bool *finalizable) bool seen_scalar = false; gfc_symbol *vtab; gfc_component *c; + gfc_symbol *parent = gfc_get_derived_super_type (derived); + + if (parent) + gfc_resolve_finalizers (parent, finalizable); /* Return early when not finalizable. Additionally, ensure that derived-type components have a their finalizables resolved. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 27b724d..f004342 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2014-08-17 Tobias Burnus <burnus@net-b.de> + + * gfortran.dg/finalize_27.f90: New. + 2014-08-16 Andrew Pinski <apinski@cavium.com> * gcc.c-torture/compile/20140816-1.c: New testcase. diff --git a/gcc/testsuite/gfortran.dg/finalize_27.f90 b/gcc/testsuite/gfortran.dg/finalize_27.f90 new file mode 100644 index 0000000..bdc7c45 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/finalize_27.f90 @@ -0,0 +1,25 @@ +! { dg-do compile } +! +! Was ICEing before +! +! Contributed by Reinhold Bader +! + +module mod_fin_04 + implicit none + type :: p_vec + contains + final :: delete + end type p_vec + type, extends(p_vec) :: bar + contains + final :: del2 + end type bar +contains + subroutine delete(this) + type(p_vec) :: this + end subroutine delete + subroutine del2(this) + type(bar) :: this + end subroutine del2 +end module |