re PR fortran/35339 (Improve translation of implied do loop in transfer)
2018-02-19 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/35339 * frontend-passes.c (traverse_io_block): Remove workaround for PR 80945. 2018-02-19 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/35339 * gfortran.dg/implied_do_io_4.f90: New test. From-SVN: r257814
This commit is contained in:
parent
87e8aa3bd9
commit
d48fc34a45
@ -1,3 +1,9 @@
|
||||
2018-02-19 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR fortran/35339
|
||||
* frontend-passes.c (traverse_io_block): Remove workaround for
|
||||
PR 80945.
|
||||
|
||||
2018-02-19 Andre Vehreschild <vehre@gcc.gnu.org>
|
||||
|
||||
* gfortran.texi: Document additional src/dst_type. Fix some typos.
|
||||
|
@ -1162,14 +1162,7 @@ traverse_io_block (gfc_code *code, bool *has_reached, gfc_code *prev)
|
||||
|
||||
gcc_assert (curr->op == EXEC_TRANSFER);
|
||||
|
||||
/* FIXME: Workaround for PR 80945 - array slices with deferred character
|
||||
lenghts do not work. Remove this section when the PR is fixed. */
|
||||
e = curr->expr1;
|
||||
if (e->expr_type == EXPR_VARIABLE && e->ts.type == BT_CHARACTER
|
||||
&& e->ts.deferred)
|
||||
return false;
|
||||
/* End of section to be removed. */
|
||||
|
||||
ref = e->ref;
|
||||
if (!ref || ref->type != REF_ARRAY || ref->u.ar.codimen != 0 || ref->next)
|
||||
return false;
|
||||
|
@ -1,3 +1,8 @@
|
||||
2018-02-19 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR fortran/35339
|
||||
* gfortran.dg/implied_do_io_4.f90: New test.
|
||||
|
||||
2018-02-19 Andre Vehreschild <vehre@gcc.gnu.org>
|
||||
|
||||
* gfortran.dg/coarray_alloc_comp_6.f08: New test.
|
||||
|
22
gcc/testsuite/gfortran.dg/implied_do_io_4.f90
Normal file
22
gcc/testsuite/gfortran.dg/implied_do_io_4.f90
Normal file
@ -0,0 +1,22 @@
|
||||
! { dg-do run }
|
||||
! { dg-additional-options "-ffrontend-optimize -fdump-tree-original" }
|
||||
! PR fortran/35339 - make sure that I/O of an implied DO loop
|
||||
! of allocatable character arrays a) works and b) is converted
|
||||
! to a transfer_array
|
||||
program main
|
||||
implicit none
|
||||
integer:: i
|
||||
integer, parameter:: N = 10
|
||||
character(len=:), dimension(:),allocatable:: ca
|
||||
allocate(character(len=N):: ca(3))
|
||||
open(unit=10,status="scratch")
|
||||
ca(1) = "foo"
|
||||
ca(2) = "bar"
|
||||
ca(3) = "xyzzy"
|
||||
write (10, '(3A10)') (ca(i),i=1,3)
|
||||
rewind (10)
|
||||
ca(:) = ''
|
||||
read (10, '(3A10)') (ca(i),i=1,3)
|
||||
if (ca(1) /= 'foo' .or. ca(2) /= 'bar' .or. ca(3) /= 'xyzzy') call abort
|
||||
end program
|
||||
! { dg-final { scan-tree-dump-times "_gfortran_transfer_array" 2 "original" } }
|
Loading…
Reference in New Issue
Block a user