From 19fe965886cfe7a3073f0cf6dc2d3150c998487b Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Sun, 17 Aug 2014 18:42:19 +0200 Subject: [PATCH] resolve.c (gfc_resolve_finalizers): Ensure that parents are resolved first. 2014-08-17 Tobias Burnus * resolve.c (gfc_resolve_finalizers): Ensure that parents are resolved first. 2014-08-17 Tobias Burnus * gfortran.dg/finalize_27.f90: New. From-SVN: r214076 --- gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/resolve.c | 4 ++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gfortran.dg/finalize_27.f90 | 25 +++++++++++++++++++++++ 4 files changed, 38 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/finalize_27.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index ce6857e30bc3..53d2691c6bb2 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2014-08-17 Tobias Burnus + + * resolve.c (gfc_resolve_finalizers): Ensure that parents are + resolved first. + 2014-08-17 Tobias Burnus * trans-io.c (gfc_build_io_library_fndecls): Fix decl of diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index ea28ef4ad926..32ff9dd00945 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 27b724ded79a..f00434267c0a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2014-08-17 Tobias Burnus + + * gfortran.dg/finalize_27.f90: New. + 2014-08-16 Andrew Pinski * 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 000000000000..bdc7c45e4ead --- /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 -- 2.47.3