aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2014-08-17 18:42:19 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2014-08-17 18:42:19 +0200
commit19fe965886cfe7a3073f0cf6dc2d3150c998487b (patch)
tree1dbe921351556015551e12beed3778f002868b5a
parent0522a84e51daf9269ab563b12bf7de458970a263 (diff)
downloadgcc-19fe965886cfe7a3073f0cf6dc2d3150c998487b.zip
gcc-19fe965886cfe7a3073f0cf6dc2d3150c998487b.tar.gz
gcc-19fe965886cfe7a3073f0cf6dc2d3150c998487b.tar.bz2
resolve.c (gfc_resolve_finalizers): Ensure that parents are resolved first.
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> * gfortran.dg/finalize_27.f90: New. From-SVN: r214076
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/resolve.c4
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gfortran.dg/finalize_27.f9025
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