From 7017a7a9f8cc2161c9379e3eaf94ce889315e132 Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Wed, 25 Sep 2013 21:56:20 +0200 Subject: [PATCH] re PR fortran/58436 ([OOP] ICE (segfault) in generate_finalization_wrapper for CLASS(*)) 2013-09-25 Tobias Burnus PR fortran/58436 * class.c (generate_finalization_wrapper): Handle CLASS(*). 2013-09-25 Tobias Burnus PR fortran/58436 * gfortran.dg/finalize_21.f90: New. From-SVN: r202923 --- gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/class.c | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/finalize_21.f90 | 12 ++++++++++++ 4 files changed, 28 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/finalize_21.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 445dfae..483d744 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,10 @@ 2013-09-25 Tobias Burnus + PR fortran/58436 + * class.c (generate_finalization_wrapper): Handle CLASS(*). + +2013-09-25 Tobias Burnus + PR fortran/57697 PR fortran/58469 * resolve.c (generate_component_assignments): Avoid double free diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c index 7117e83..be4959a 100644 --- a/gcc/fortran/class.c +++ b/gcc/fortran/class.c @@ -1427,6 +1427,12 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns, gfc_expr *ancestor_wrapper = NULL, *rank; gfc_iterator *iter; + if (derived->attr.unlimited_polymorphic) + { + vtab_final->initializer = gfc_get_null_expr (NULL); + return; + } + /* Search for the ancestor's finalizers. */ if (derived->attr.extension && derived->components && (!derived->components->ts.u.derived->attr.abstract diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cf19ecf..634e747 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2013-09-25 Tobias Burnus + PR fortran/58436 + * gfortran.dg/finalize_21.f90: New. + +2013-09-25 Tobias Burnus + PR fortran/57697 PR fortran/58469 * gfortran.dg/defined_assignment_8.f90: New. diff --git a/gcc/testsuite/gfortran.dg/finalize_21.f90 b/gcc/testsuite/gfortran.dg/finalize_21.f90 new file mode 100644 index 0000000..6f6ede3 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/finalize_21.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! +! PR fortran/58436 +! +! The following was ICEing and lacking _final=0 +! +class(*), allocatable :: var +end + +! { dg-final { scan-tree-dump "static struct __vtype__STAR __vtab__STAR = {._hash=0, ._size=., ._extends=0B, ._def_init=0B, ._copy=0B, ._final=0B};" "original" } } +! { dg-final { cleanup-tree-dump "original" } } -- 2.7.4