]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/46344 ([OOP] ICE with allocatable CLASS components)
authorJanus Weil <janus@gcc.gnu.org>
Mon, 8 Nov 2010 22:42:34 +0000 (23:42 +0100)
committerJanus Weil <janus@gcc.gnu.org>
Mon, 8 Nov 2010 22:42:34 +0000 (23:42 +0100)
2010-11-08  Janus Weil  <janus@gcc.gnu.org>

PR fortran/46344
* decl.c (build_struct): Build vtab immediately if derived type
has already been declared.

2010-11-08  Janus Weil  <janus@gcc.gnu.org>

PR fortran/46344
* gfortran.dg/class_28.f03: Extended.

From-SVN: r166458

gcc/fortran/ChangeLog
gcc/fortran/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/class_28.f03

index a513933c5a10278b7fd404a75d0b1bb048b747a4..86aad78e29ce1be5d160201ff6c340780c182197 100644 (file)
@@ -1,3 +1,9 @@
+2010-11-08  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/46344
+       * decl.c (build_struct): Build vtab immediately if derived type
+       has already been declared.
+
 2010-11-08  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/46344
index 14575dec89875bf1483eed0113b42a5bfd0508da..7fdfc99a64640207614a5f614fd581ecdec8c2f5 100644 (file)
@@ -1629,7 +1629,13 @@ build_struct (const char *name, gfc_charlen *cl, gfc_expr **init,
 
 scalar:
   if (c->ts.type == BT_CLASS)
-    gfc_build_class_symbol (&c->ts, &c->attr, &c->as, true);
+    {
+      bool delayed = (gfc_state_stack->sym == c->ts.u.derived)
+                    || (!c->ts.u.derived->components
+                        && !c->ts.u.derived->attr.zero_comp);
+      gfc_build_class_symbol (&c->ts, &c->attr, &c->as, delayed);
+    }
+
 
   return t;
 }
index c9be34d42f51c50218deeb9c41618dd2064e4f65..4c348babbc296a3d49fd1b9206724b08c79a76d0 100644 (file)
@@ -1,3 +1,8 @@
+2010-11-08  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/46344
+       * gfortran.dg/class_28.f03: Extended.
+
 2010-11-08  Nicola Pero  <nicola.pero@meta-innovation.com>
 
        * objc.dg/property/dotsyntax-13.m: New.
index cfd46a8eb6563af9ba2d9d3ee6f2db709f21a488..684b8cdab766c6749ea74580b5565105656b1821 100644 (file)
@@ -17,6 +17,21 @@ module m
 
 end module m
 
+
+module m2
+
+  type t1
+  end type
+
+  type  t2
+    class(t1), allocatable :: c
+  end type
+
+  type(t1) :: w
+
+end module m2
+
+
 program p
   use m
   implicit none
@@ -27,4 +42,4 @@ program p
 
 end program p
 
-! { dg-final { cleanup-modules "m" } }
+! { dg-final { cleanup-modules "m m2" } }