diff options
author | Tobias Burnus <burnus@net-b.de> | 2013-07-22 19:28:56 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2013-07-22 19:28:56 +0200 |
commit | 558f3755faa4bc4a15cc4b917d487aca8de09bcb (patch) | |
tree | b1604215f241ce9033caeeb9f75bd4b1338bba15 /gcc | |
parent | 9ffaa03201577636e08e596570e95b572674681f (diff) | |
download | gcc-558f3755faa4bc4a15cc4b917d487aca8de09bcb.zip gcc-558f3755faa4bc4a15cc4b917d487aca8de09bcb.tar.gz gcc-558f3755faa4bc4a15cc4b917d487aca8de09bcb.tar.bz2 |
re PR fortran/57906 (Coarray components: Assignment optimized away (gfortran.dg/coarray/lib_realloc_1.f90))
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/fortran/class.c | 1 | ||||
-rw-r--r-- | gcc/fortran/trans-array.c | 17 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/coarray/lib_realloc_1.f90 | 1 |
5 files changed, 29 insertions, 5 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 4ea5d2e..c531d03 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -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 diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c index ba8efa9..51bfd56 100644 --- a/gcc/fortran/class.c +++ b/gcc/fortran/class.c @@ -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; diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 3fdd8d9..0aac678 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -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, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5b167b2..97f52c9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,12 @@ 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 * gfortran.dg/class_array_7.f03: Fix memory leak. diff --git a/gcc/testsuite/gfortran.dg/coarray/lib_realloc_1.f90 b/gcc/testsuite/gfortran.dg/coarray/lib_realloc_1.f90 index ed906f5..f3d7f35 100644 --- a/gcc/testsuite/gfortran.dg/coarray/lib_realloc_1.f90 +++ b/gcc/testsuite/gfortran.dg/coarray/lib_realloc_1.f90 @@ -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 |