Commit 241e79cf by Tobias Burnus Committed by Tobias Burnus

trans-array.c (structure_alloc_comps): Fix for allocatable scalar coarray components.

2011-08-25  Tobias Burnus  <burnus@net-b.de>

        * trans-array.c (structure_alloc_comps): Fix for allocatable
        scalar coarray components.
        * trans-expr.c (gfc_conv_component_ref): Ditto.
        * trans-type.c (gfc_get_derived_type): Ditto.

2011-08-25  Tobias Burnus  <burnus@net-b.de>

        * gfortran.dg/coarray/alloc_comp_1.f90: New.

From-SVN: r178068
parent 3e4c754b
2011-08-25 Tobias Burnus <burnus@net-b.de>
* trans-array.c (structure_alloc_comps): Fix for allocatable
scalar coarray components.
* trans-expr.c (gfc_conv_component_ref): Ditto.
* trans-type.c (gfc_get_derived_type): Ditto.
2011-08-24 Tobias Burnus <burnus@net-b.de>
PR fortran/50163
......
......@@ -6798,7 +6798,8 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl,
gfc_add_expr_to_block (&fnblock, tmp);
}
if (c->attr.allocatable && c->attr.dimension)
if (c->attr.allocatable
&& (c->attr.dimension || c->attr.codimension))
{
comp = fold_build3_loc (input_location, COMPONENT_REF, ctype,
decl, cdecl, NULL_TREE);
......@@ -6845,7 +6846,8 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl,
case NULLIFY_ALLOC_COMP:
if (c->attr.pointer)
continue;
else if (c->attr.allocatable && c->attr.dimension)
else if (c->attr.allocatable
&& (c->attr.dimension|| c->attr.codimension))
{
comp = fold_build3_loc (input_location, COMPONENT_REF, ctype,
decl, cdecl, NULL_TREE);
......
......@@ -564,7 +564,8 @@ gfc_conv_component_ref (gfc_se * se, gfc_ref * ref)
se->string_length = tmp;
}
if (((c->attr.pointer || c->attr.allocatable) && c->attr.dimension == 0
if (((c->attr.pointer || c->attr.allocatable)
&& (!c->attr.dimension && !c->attr.codimension)
&& c->ts.type != BT_CHARACTER)
|| c->attr.proc_pointer)
se->expr = build_fold_indirect_ref_loc (input_location,
......
......@@ -2395,7 +2395,7 @@ gfc_get_derived_type (gfc_symbol * derived)
/* This returns an array descriptor type. Initialization may be
required. */
if (c->attr.dimension && !c->attr.proc_pointer)
if ((c->attr.dimension || c->attr.codimension) && !c->attr.proc_pointer )
{
if (c->attr.pointer || c->attr.allocatable)
{
......
2011-08-25 Tobias Burnus <burnus@net-b.de>
* gfortran.dg/coarray/alloc_comp_1.f90: New.
2011-08-25 Richard Guenther <rguenther@suse.de>
* gcc.dg/Wshadow-3.c: Restore original content destroyed by r148442.
......
! { dg-do run }
!
! Allocatable scalar corrays were mishandled (ICE)
!
type t
integer, allocatable :: caf[:]
end type t
type(t) :: a
allocate (a%caf[3:*])
a%caf = 7
!print *, a%caf
if (a%caf /= 7) call abort ()
if (any (lcobound (a%caf) /= [ 3 ]) &
.or. ucobound (a%caf, dim=1) /= this_image ()+2) &
call abort ()
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment