aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2014-02-08 22:32:25 +0100
committerJanus Weil <janus@gcc.gnu.org>2014-02-08 22:32:25 +0100
commita6cd299b540dd587cf43b6c5baae4db16044a5f6 (patch)
tree5ae69f4bb8065dba5e5e0c431bebad1ce0c7d929 /gcc
parentdf3927406e3ca1ed7620332a8608ad4bce4c45c6 (diff)
downloadgcc-a6cd299b540dd587cf43b6c5baae4db16044a5f6.zip
gcc-a6cd299b540dd587cf43b6c5baae4db16044a5f6.tar.gz
gcc-a6cd299b540dd587cf43b6c5baae4db16044a5f6.tar.bz2
re PR fortran/58470 ([OOP] ICE on invalid with FINAL procedure and type extension)
2014-02-08 Janus Weil <janus@gcc.gnu.org> Mikael Morin <mikael.morin@gcc.gnu.org> 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 <janus@gcc.gnu.org> PR fortran/58470 * gfortran.dg/finalize_22.f90: New. Co-Authored-By: Mikael Morin <mikael@gcc.gnu.org> From-SVN: r207636
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog9
-rw-r--r--gcc/fortran/class.c3
-rw-r--r--gcc/fortran/resolve.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/finalize_22.f9020
5 files changed, 35 insertions, 6 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 79f2074..052248c 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,12 @@
+2014-02-08 Janus Weil <janus@gcc.gnu.org>
+ Mikael Morin <mikael.morin@gcc.gnu.org>
+
+ 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 <bensberg@justemail.net>
PR translation/52289
diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c
index d3569fd..8af9172 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 898a0ae..0262165 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 8448c42..9b9d2cd 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-02-08 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/58470
+ * gfortran.dg/finalize_22.f90: New.
+
2014-02-08 Paul Thomas <pault@gcc.gnu.org>
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 0000000..57fa6e7
--- /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 <abensonca@gmail.com>
+
+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" } }