OSDN Git Service

2011-05-29 Tobias Burnus <burnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 29 May 2011 18:15:08 +0000 (18:15 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 29 May 2011 18:15:08 +0000 (18:15 +0000)
            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

gcc/fortran/ChangeLog
gcc/fortran/trans-array.c
gcc/fortran/trans-types.c
gcc/fortran/trans.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/coarray_23.f90 [new file with mode: 0644]

index 10ec0b0..71e6452 100644 (file)
@@ -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
index b2992f0..d83a7a9 100644 (file)
@@ -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;
     }
 
index 94b9a59..02a75fd 100644 (file)
@@ -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)
index fcbb850..0ab4637 100644 (file)
@@ -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);
index aa43283..fce1c32 100644 (file)
@@ -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 (file)
index 0000000..429928a
--- /dev/null
@@ -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