aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2013-09-16 20:01:59 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2013-09-16 20:01:59 +0200
commit0ebdf3ae98f374c2270d92b19d6d3465422fbe4f (patch)
tree4873887ffd5e7ca0875b3caf0d6c7e56987f0e4a /gcc
parenta5bd71fa0e4e2b3063896e979f888e1296d60b4e (diff)
downloadgcc-0ebdf3ae98f374c2270d92b19d6d3465422fbe4f.zip
gcc-0ebdf3ae98f374c2270d92b19d6d3465422fbe4f.tar.gz
gcc-0ebdf3ae98f374c2270d92b19d6d3465422fbe4f.tar.bz2
re PR fortran/58356 (ICE with finalization and type extension)
2013-09-16 Tobias Burnus <burnus@net-b.de> PR fortran/58356 * class.c (generate_finalization_wrapper): Init proc_tree if not yet resolved. 2013-09-16 Tobias Burnus <burnus@net-b.de> PR fortran/58356 * gfortran.dg/finalize_19.f90: New. From-SVN: r202633
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/class.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/finalize_19.f9021
4 files changed, 34 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 0f73dfe..37c5950 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,11 @@
2013-09-16 Tobias Burnus <burnus@net-b.de>
+ PR fortran/58356
+ * class.c (generate_finalization_wrapper): Init proc_tree if
+ not yet resolved.
+
+2013-09-16 Tobias Burnus <burnus@net-b.de>
+
PR fortran/57697
* resolve.c (generate_component_assignments): Correctly handle the
case that the LHS is not allocated.
diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c
index 629b052..7117e83 100644
--- a/gcc/fortran/class.c
+++ b/gcc/fortran/class.c
@@ -1881,6 +1881,8 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns,
for (fini = derived->f2k_derived->finalizers; fini; fini = fini->next)
{
+ if (!fini->proc_tree)
+ fini->proc_tree = gfc_find_sym_in_symtree (fini->proc_sym);
if (fini->proc_tree->n.sym->attr.elemental)
{
fini_elem = fini;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5971d1f..f606965 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-09-16 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/58356
+ * gfortran.dg/finalize_19.f90: New.
+
2013-09-16 Vladimir Makarov <vmakarov@redhat.com>
* gcc.target/i386/pr58418.c: New.
diff --git a/gcc/testsuite/gfortran.dg/finalize_19.f90 b/gcc/testsuite/gfortran.dg/finalize_19.f90
new file mode 100644
index 0000000..1eeb6af
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/finalize_19.f90
@@ -0,0 +1,21 @@
+! { dg-do compile }
+!
+! PR fortran/58356
+!
+! Contributed by Andrew Benson
+!
+module ct
+ type :: cfl
+ contains
+ final :: cfld
+ end type cfl
+ type, extends(cfl) :: cfde
+ contains
+ end type cfde
+contains
+ subroutine cfld(self)
+ implicit none
+ type(cfl), intent(inout) :: self
+ return
+ end subroutine cfld
+end module ct