From: Tobias Burnus Date: Mon, 16 Sep 2013 18:01:59 +0000 (+0200) Subject: re PR fortran/58356 (ICE with finalization and type extension) X-Git-Tag: releases/gcc-4.9.0~4038 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0ebdf3ae98f374c2270d92b19d6d3465422fbe4f;p=thirdparty%2Fgcc.git re PR fortran/58356 (ICE with finalization and type extension) 2013-09-16 Tobias Burnus PR fortran/58356 * class.c (generate_finalization_wrapper): Init proc_tree if not yet resolved. 2013-09-16 Tobias Burnus PR fortran/58356 * gfortran.dg/finalize_19.f90: New. From-SVN: r202633 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 0f73dfe5f908..37c59506e540 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2013-09-16 Tobias Burnus + + PR fortran/58356 + * class.c (generate_finalization_wrapper): Init proc_tree if + not yet resolved. + 2013-09-16 Tobias Burnus PR fortran/57697 diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c index 629b052fb32d..7117e8361564 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 5971d1fd1b67..f606965c88d8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-09-16 Tobias Burnus + + PR fortran/58356 + * gfortran.dg/finalize_19.f90: New. + 2013-09-16 Vladimir Makarov * 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 000000000000..1eeb6af658e3 --- /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