From: Tobias Burnus Date: Sun, 6 May 2012 20:30:05 +0000 (+0200) Subject: re PR fortran/41587 ([OOP] ICE with ALLOCATABLE CLASS components) X-Git-Tag: misc/gccgo-go1_1_2~3064 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ea59b186fbc1648d23b266edb1f01c60b0ed72c0;p=thirdparty%2Fgcc.git re PR fortran/41587 ([OOP] ICE with ALLOCATABLE CLASS components) 2012-05-06 Tobias Burnus PR fortran/41587 * decl.c (build_struct): Don't ignore FAILED status. 2012-05-06 Tobias Burnus PR fortran/41587 * gfortran.dg/class_array_13.f90: New. From-SVN: r187214 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index a9f1cecc4622..277e86e041e3 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2012-05-06 Tobias Burnus + + PR fortran/41587 + * decl.c (build_struct): Don't ignore FAILED status. + 2012-05-05 Paul Thomas PR fortran/41600 diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 4da21c316e3a..e166bc916b19 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d777ff447b31..6d831947fb80 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-05-06 Tobias Burnus + + PR fortran/41587 + * gfortran.dg/class_array_13.f90: New. + 2012-05-06 Tristan Gingold * 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 index 000000000000..567bbf81546e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_array_13.f90 @@ -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