Commit d5ace305 by Paul Thomas

re PR fortran/80945 (Invalid code with allocatable character array in READ/WRITE statement)

2018-02-18  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/80945
	* trans-array.c (gfc_conv_expr_descriptor): Set parmtype from
	the typenode in the case of deferred length characters.

2018-02-18  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/80945
	* gfortran.dg/associate_35.f90: Remove error, add stop n's and
	change to run.

From-SVN: r257788
parent c83aacae
2018-02-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/80945
* trans-array.c (gfc_conv_expr_descriptor): Set parmtype from
the typenode in the case of deferred length characters.
2018-02-17 Thomas Koenig <tkoenig@gcc.gnu.org> 2018-02-17 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/84270 PR fortran/84270
......
...@@ -7341,7 +7341,11 @@ gfc_conv_expr_descriptor (gfc_se *se, gfc_expr *expr) ...@@ -7341,7 +7341,11 @@ gfc_conv_expr_descriptor (gfc_se *se, gfc_expr *expr)
else else
{ {
/* Otherwise make a new one. */ /* Otherwise make a new one. */
parmtype = gfc_get_element_type (TREE_TYPE (desc)); if (expr->ts.type == BT_CHARACTER && expr->ts.deferred)
parmtype = gfc_typenode_for_spec (&expr->ts);
else
parmtype = gfc_get_element_type (TREE_TYPE (desc));
parmtype = gfc_get_array_type_bounds (parmtype, loop.dimen, codim, parmtype = gfc_get_array_type_bounds (parmtype, loop.dimen, codim,
loop.from, loop.to, 0, loop.from, loop.to, 0,
GFC_ARRAY_UNKNOWN, false); GFC_ARRAY_UNKNOWN, false);
......
2018-02-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/80945
* gfortran.dg/associate_35.f90: Remove error, add stop n's and
change to run.
2018-02-17 Thomas Koenig <tkoenig@gcc.gnu.org> 2018-02-17 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/84270 PR fortran/84270
......
! { dg-do run }
!
! Test fix for PR80945, in which the character length was fixed at zero.
!
! Contributed by Nicolas Koenig <koenigni@gcc.gnu.org>
!
program main
implicit none
integer:: i
integer, parameter:: N = 10
character(20) :: buffer
character(len=:), dimension(:),allocatable:: ca
character(len=:), dimension(:,:),allocatable:: cb
allocate(character(len=N) :: ca(3))
ca(1) = "foo"
ca(2) = "bar"
ca(3) = "xyzzy"
write (buffer, '(3A5)') ca(1:3)
if (trim (buffer) .ne. "foo bar xyzzy") stop 1
end program
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment