2012-05-06 Tobias Burnus <burnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 6 May 2012 20:30:05 +0000 (20:30 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 6 May 2012 20:30:05 +0000 (20:30 +0000)
        PR fortran/41587
        * decl.c (build_struct): Don't ignore FAILED status.

2012-05-06  Tobias Burnus  <burnus@net-b.de>

        PR fortran/41587
        * gfortran.dg/class_array_13.f90: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@187214 138bc75d-0d04-0410-961f-82ee72b054a4

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

index a9f1cec..277e86e 100644 (file)
@@ -1,3 +1,8 @@
+2012-05-06  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/41587
+       * decl.c (build_struct): Don't ignore FAILED status.
+
 2012-05-05  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/41600
index 4da21c3..e166bc9 100644 (file)
@@ -1658,7 +1658,10 @@ scalar:
       bool delayed = (gfc_state_stack->sym == c->ts.u.derived)
                     || (!c->ts.u.derived->components
                         && !c->ts.u.derived->attr.zero_comp);
-      return gfc_build_class_symbol (&c->ts, &c->attr, &c->as, delayed);
+      gfc_try t2 = gfc_build_class_symbol (&c->ts, &c->attr, &c->as, delayed);
+
+      if (t != FAILURE)
+       t = t2;
     }
 
   return t;
index d777ff4..6d83194 100644 (file)
@@ -1,3 +1,8 @@
+2012-05-06  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/41587
+       * gfortran.dg/class_array_13.f90: New.
+
 2012-05-06  Tristan Gingold  <gingold@adacore.com>
 
        * gnat.dg/warn7.adb: New test.
diff --git a/gcc/testsuite/gfortran.dg/class_array_13.f90 b/gcc/testsuite/gfortran.dg/class_array_13.f90
new file mode 100644 (file)
index 0000000..567bbf8
--- /dev/null
@@ -0,0 +1,26 @@
+! { dg-do compile }
+! { dg-options "-fcoarray=single" }
+!
+! PR fortran/41587
+!
+
+type t0
+  integer :: j = 42
+end type t0
+
+type t
+  integer :: i
+  class(t0), allocatable :: foo(3) ! { dg-error "must have a deferred shape" }
+end type t
+
+type t2
+  integer :: i
+  class(t0), pointer :: foo(3) ! { dg-error "must have a deferred shape" }
+end type t2
+
+type t3
+  integer :: i
+  class(t0), allocatable :: foo[3] ! { dg-error "Upper bound of last coarray dimension must be '\\*'" }
+end type t3
+
+end