]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/57906 (Coarray components: Assignment optimized away (gfortran.dg/coarr...
authorTobias Burnus <burnus@net-b.de>
Mon, 22 Jul 2013 17:28:56 +0000 (19:28 +0200)
committerTobias Burnus <burnus@gcc.gnu.org>
Mon, 22 Jul 2013 17:28:56 +0000 (19:28 +0200)
2013-07-22  Tobias Burnus  <burnus@net-b.de>

        PR fortran/57906
        PR fortran/52052
        * class.c (gfc_build_class_symbol): Set coarray_comp.
        * trans-array.c (structure_alloc_comps): For coarrays,
        directly use the data pointer address.

2013-07-22  Tobias Burnus  <burnus@net-b.de>

        PR fortran/57906
        PR fortran/52052
        * coarray/lib_realloc_1.f90: Permit optimization.
        * gfortran.dg/coarray_31.f90: New.

From-SVN: r201140

gcc/fortran/ChangeLog
gcc/fortran/class.c
gcc/fortran/trans-array.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/coarray/lib_realloc_1.f90

index 4ea5d2ee99d7988f269a46e645f38ff4152a4972..c531d039993727177a2f8305b548c5075eaabb82 100644 (file)
@@ -1,3 +1,11 @@
+2013-07-22  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/57906
+       PR fortran/52052
+       * class.c (gfc_build_class_symbol): Set coarray_comp.
+       * trans-array.c (structure_alloc_comps): For coarrays,
+       directly use the data pointer address.
+
 2013-07-22  Chang  <pchang9@cs.wisc.edu>
 
        * trans-decl.c (gfc_build_dummy_array_decl): Exit loop after
index ba8efa91114ee0e0a3275170e7ef95ee81a1c328..51bfd5685ea74d1ea993e20ab5dea8d1e4af861b 100644 (file)
@@ -666,6 +666,7 @@ gfc_build_class_symbol (gfc_typespec *ts, symbol_attribute *attr,
 
       fclass->attr.extension = ts->u.derived->attr.extension + 1;
       fclass->attr.alloc_comp = ts->u.derived->attr.alloc_comp;
+      fclass->attr.coarray_comp = ts->u.derived->attr.coarray_comp;
     }
 
   fclass->attr.is_class = 1;
index 3fdd8d9ab01360a95bce25706e5523dd971af67b..0aac6789f80c1893cae102b4b2f3a515962ab1d8 100644 (file)
@@ -7589,9 +7589,9 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl,
 
          if ((c->ts.type == BT_DERIVED && !c->attr.pointer)
              || (c->ts.type == BT_CLASS && !CLASS_DATA (c)->attr.class_pointer))
-           {
-             comp = fold_build3_loc (input_location, COMPONENT_REF, ctype,
-                                     decl, cdecl, NULL_TREE);
+           {
+             comp = fold_build3_loc (input_location, COMPONENT_REF, ctype,
+                                     decl, cdecl, NULL_TREE);
 
              /* The finalizer frees allocatable components.  */
              called_dealloc_with_status
@@ -7737,8 +7737,17 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl,
                                  cdecl, NULL_TREE);
          dcmp = fold_build3_loc (input_location, COMPONENT_REF, ctype, dest,
                                  cdecl, NULL_TREE);
+
          if (c->attr.codimension)
-           gfc_add_modify (&fnblock, dcmp, comp);
+           {
+             if (c->ts.type == BT_CLASS)
+               {
+                 comp = gfc_class_data_get (comp);
+                 dcmp = gfc_class_data_get (dcmp);
+               }
+             gfc_conv_descriptor_data_set (&fnblock, dcmp,
+                                          gfc_conv_descriptor_data_get (comp));
+           }
          else
            {
              tmp = structure_alloc_comps (c->ts.u.derived, comp, dcmp,
index 5b167b2a891260e1b285db2e54c072566165bed2..97f52c9f1ac6a86cf0a5fe4339a842dee404d1bc 100644 (file)
@@ -1,3 +1,10 @@
+2013-07-22  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/57906
+       PR fortran/52052
+       * coarray/lib_realloc_1.f90: Permit optimization.
+       * gfortran.dg/coarray_31.f90: New.
+
 2013-07-22  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/57762
index ed906f5a13412eead1936eb8c05f767e95eed888..f3d7f35f271e9425185d2df9d8ae6346cc4d899f 100644 (file)
@@ -1,5 +1,4 @@
 ! { dg-do run }
-! { dg-options "-O0" }
 !
 ! Test that for CAF components _gfortran_caf_deregister is called
 ! Test that norealloc happens for CAF components during assignment