aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2011-05-29 20:15:08 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2011-05-29 20:15:08 +0200
commit8a5c4899e8f57f09e288043984cc0f4584f17fc4 (patch)
tree6d2fbf1b69f77f9c491dee27d2731c9582c5f614 /gcc
parent269e0e1853605002f06a19b0e7e5106d8d491631 (diff)
downloadgcc-8a5c4899e8f57f09e288043984cc0f4584f17fc4.zip
gcc-8a5c4899e8f57f09e288043984cc0f4584f17fc4.tar.gz
gcc-8a5c4899e8f57f09e288043984cc0f4584f17fc4.tar.bz2
re PR fortran/18918 (Eventually support Fortran 2008's coarrays [co-arrays])
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-29 Tobias Burnus <burnus@net-b.de> PR fortran/18918 * gfortran.dg/coarray_23.f90: New. Co-Authored-By: Richard Guenther <rguenther@suse.de> From-SVN: r174410
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog9
-rw-r--r--gcc/fortran/trans-array.c2
-rw-r--r--gcc/fortran/trans-types.c5
-rw-r--r--gcc/fortran/trans.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_23.f9013
6 files changed, 30 insertions, 6 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 10ec0b0..71e6452 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,12 @@
+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
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index b2992f0..d83a7a9 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -2628,7 +2628,7 @@ gfc_conv_array_ref (gfc_se * se, gfc_array_ref * ar, gfc_symbol * sym,
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;
}
diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c
index 94b9a59..02a75fd 100644
--- a/gcc/fortran/trans-types.c
+++ b/gcc/fortran/trans-types.c
@@ -1423,10 +1423,7 @@ gfc_get_nodesc_array_type (tree etype, gfc_array_spec * as, gfc_packed packed,
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)
diff --git a/gcc/fortran/trans.c b/gcc/fortran/trans.c
index fcbb850..0ab4637 100644
--- a/gcc/fortran/trans.c
+++ b/gcc/fortran/trans.c
@@ -320,7 +320,7 @@ gfc_build_array_ref (tree base, tree offset, tree decl)
{
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);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index aa43283..fce1c32 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+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
diff --git a/gcc/testsuite/gfortran.dg/coarray_23.f90 b/gcc/testsuite/gfortran.dg/coarray_23.f90
new file mode 100644
index 0000000..429928a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/coarray_23.f90
@@ -0,0 +1,13 @@
+! { 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