]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/58436 ([OOP] ICE (segfault) in generate_finalization_wrapper for CLASS(*))
authorTobias Burnus <burnus@net-b.de>
Wed, 25 Sep 2013 19:56:20 +0000 (21:56 +0200)
committerTobias Burnus <burnus@gcc.gnu.org>
Wed, 25 Sep 2013 19:56:20 +0000 (21:56 +0200)
2013-09-25  Tobias Burnus  <burnus@net-b.de>

        PR fortran/58436
        * class.c (generate_finalization_wrapper): Handle CLASS(*).

2013-09-25  Tobias Burnus  <burnus@net-b.de>

        PR fortran/58436
        * gfortran.dg/finalize_21.f90: New.

From-SVN: r202923

gcc/fortran/ChangeLog
gcc/fortran/class.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/finalize_21.f90 [new file with mode: 0644]

index 445dfaef17669f1bfa676fd06845e338bc04e78e..483d744f676262efbdaad81dd2e196a2ee2010d3 100644 (file)
@@ -1,3 +1,8 @@
+2013-09-25  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/58436
+       * class.c (generate_finalization_wrapper): Handle CLASS(*).
+
 2013-09-25  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/57697
index 7117e8361564e174db90d3c65eaf0c1d75e80f6a..be4959a7deed7d0659a01137802af1f7b944e0d1 100644 (file)
@@ -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
index cf19ecf33b07de498b9d7e4e85ef6c7990310c86..634e747002a9abe3d1774e9e47eb79113d85bbc3 100644 (file)
@@ -1,3 +1,8 @@
+2013-09-25  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/58436
+       * gfortran.dg/finalize_21.f90: New.
+
 2013-09-25  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/57697
diff --git a/gcc/testsuite/gfortran.dg/finalize_21.f90 b/gcc/testsuite/gfortran.dg/finalize_21.f90
new file mode 100644 (file)
index 0000000..6f6ede3
--- /dev/null
@@ -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" } }