Richard Guenther <rguenther@suse.de>
PR fortran/18918
* trans-types.c (gfc_get_nodesc_array_type): Don't mess with
the type's TREE_TYPE.
* trans-array.c (gfc_conv_array_ref): Use TYPE_MAIN_VARIANT.
* trans.c (gfc_build_array_ref): Ditto.
2011-05-29 Tobias Burnus <burnus@net-b.de>
PR fortran/18918
* gfortran.dg/coarray_23.f90: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@174410
138bc75d-0d04-0410-961f-
82ee72b054a4
+2011-05-29 Tobias Burnus <burnus@net-b.de>
+ Richard Guenther <rguenther@suse.de>
+
+ PR fortran/18918
+ * trans-types.c (gfc_get_nodesc_array_type): Don't mess with
+ the type's TREE_TYPE.
+ * trans-array.c (gfc_conv_array_ref): Use TYPE_MAIN_VARIANT.
+ * trans.c (gfc_build_array_ref): Ditto.
+
2011-05-27 Tobias Burnus <burnus@net-b.de>
PR fortran/18918
se->expr = build_fold_indirect_ref_loc (input_location, se->expr);
/* Use the actual tree type and not the wrapped coarray. */
- se->expr = fold_convert (TREE_TYPE (TREE_TYPE (se->expr)), se->expr);
+ se->expr = fold_convert (TYPE_MAIN_VARIANT (TREE_TYPE (se->expr)), se->expr);
return;
}
if (as->rank)
type = make_node (ARRAY_TYPE);
else
- {
- type = build_variant_type_copy (etype);
- TREE_TYPE (type) = etype;
- }
+ type = build_variant_type_copy (etype);
GFC_ARRAY_TYPE_P (type) = 1;
TYPE_LANG_SPECIFIC (type)
{
gcc_assert (GFC_TYPE_ARRAY_CORANK (type) > 0);
- return fold_convert (TREE_TYPE (type), base);
+ return fold_convert (TYPE_MAIN_VARIANT (type), base);
}
gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
+2011-05-29 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/18918
+ * gfortran.dg/coarray_23.f90: New.
+
2011-05-29 Richard Sandiford <rdsandiford@googlemail.com>
From Ryan Mansfield
--- /dev/null
+! { dg-do compile }
+! { dg-options "-fcoarray=single" }
+!
+! PR fortran/18918
+!
+! The example was ICEing before as the tree-decl
+! of the type was wrong.
+!
+
+ subroutine test
+ complex, save :: z[*]
+ if (z /= cmplx (0.0, 0.0)) call abort()
+ end subroutine test