From: Janus Weil Date: Sat, 8 Feb 2014 21:32:25 +0000 (+0100) Subject: re PR fortran/58470 ([OOP] ICE on invalid with FINAL procedure and type extension) X-Git-Tag: releases/gcc-4.9.0~994 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a6cd299b540dd587cf43b6c5baae4db16044a5f6;p=thirdparty%2Fgcc.git re PR fortran/58470 ([OOP] ICE on invalid with FINAL procedure and type extension) 2014-02-08 Janus Weil Mikael Morin PR fortran/58470 * class.c (generate_finalization_wrapper): Assert that proc_tree has been set in gfc_resolve_finalizers. * resolve.c (resolve_fl_derived0): Remove unnecessary call to gfc_is_finalizable. 2014-02-08 Janus Weil PR fortran/58470 * gfortran.dg/finalize_22.f90: New. Co-Authored-By: Mikael Morin From-SVN: r207636 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 79f20747c3ac..052248c761e9 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,12 @@ +2014-02-08 Janus Weil + Mikael Morin + + PR fortran/58470 + * class.c (generate_finalization_wrapper): Assert that proc_tree has + been set in gfc_resolve_finalizers. + * resolve.c (resolve_fl_derived0): Remove unnecessary call to + gfc_is_finalizable. + 2014-02-07 Benno Schulenberg PR translation/52289 diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c index d3569fd6ba89..8af9172dfcd3 100644 --- a/gcc/fortran/class.c +++ b/gcc/fortran/class.c @@ -1880,8 +1880,7 @@ 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); + gcc_assert (fini->proc_tree); /* Should have been set in gfc_resolve_finalizers. */ if (fini->proc_tree->n.sym->attr.elemental) { fini_elem = fini; diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 898a0ae4ef46..02621656583a 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -12455,10 +12455,6 @@ resolve_fl_derived0 (gfc_symbol *sym) /* Add derived type to the derived type list. */ add_dt_to_dt_list (sym); - /* Check if the type is finalizable. This is done in order to ensure that the - finalization wrapper is generated early enough. */ - gfc_is_finalizable (sym, NULL); - return true; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8448c42b9b68..9b9d2cde8e73 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-02-08 Janus Weil + + PR fortran/58470 + * gfortran.dg/finalize_22.f90: New. + 2014-02-08 Paul Thomas PR fortran/60066 diff --git a/gcc/testsuite/gfortran.dg/finalize_22.f90 b/gcc/testsuite/gfortran.dg/finalize_22.f90 new file mode 100644 index 000000000000..57fa6e78de31 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/finalize_22.f90 @@ -0,0 +1,20 @@ +! { dg-do compile } +! +! PR 58470: [4.9 Regression] [OOP] ICE on invalid with FINAL procedure and type extension +! +! Contributed by Andrew Benson + +module cf + type :: cfml + contains + final :: mld + end type cfml + type, extends(cfml) :: cfmde + end type cfmde +contains + subroutine mld(s) ! { dg-error "must be of type" } + class(cfml), intent(inout) :: s + end subroutine mld +end module cf + +! { dg-final { cleanup-modules "cf" } }