Commit d44235fb by Paul Thomas

re PR fortran/64120 ([F03] Wrong handling of allocatable character string)

2018-09-17  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/64120
	* trans-decl.c (gfc_get_symbol_decl): Flag allocatable, scalar
	characters with a variable length expression for deferred init.
	(gfc_trans_deferred_vars): Perform the assignment for these
	symbols by calling gfc_conv_string_length.

2018-09-17  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/64120
	* gfortran.dg/allocatable_scalar_14.f90 : New test.

From-SVN: r264365
parent ecfb64f6
2018-09-17 Paul Thomas <pault@gcc.gnu.org>
PR fortran/64120
* trans-decl.c (gfc_get_symbol_decl): Flag allocatable, scalar
characters with a variable length expression for deferred init.
(gfc_trans_deferred_vars): Perform the assignment for these
symbols by calling gfc_conv_string_length.
2018-09-17 Paul Thomas <pault@gcc.gnu.org>
PR fortran/85954
* resolve.c (resolve_assoc_var): If the target expression is a
deferred charlen dummy and the associate name shares the
......
......@@ -1745,6 +1745,13 @@ gfc_get_symbol_decl (gfc_symbol * sym)
&& !(sym->attr.use_assoc && !intrinsic_array_parameter)))
gfc_defer_symbol_init (sym);
if (sym->ts.type == BT_CHARACTER
&& sym->attr.allocatable
&& !sym->attr.dimension
&& sym->ts.u.cl && sym->ts.u.cl->length
&& sym->ts.u.cl->length->expr_type == EXPR_VARIABLE)
gfc_defer_symbol_init (sym);
/* Associate names can use the hidden string length variable
of their associated target. */
if (sym->ts.type == BT_CHARACTER
......@@ -4603,6 +4610,13 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block)
gfc_set_backend_locus (&sym->declared_at);
gfc_start_block (&init);
if (sym->ts.type == BT_CHARACTER
&& sym->attr.allocatable
&& !sym->attr.dimension
&& sym->ts.u.cl && sym->ts.u.cl->length
&& sym->ts.u.cl->length->expr_type == EXPR_VARIABLE)
gfc_conv_string_length (sym->ts.u.cl, NULL, &init);
if (!sym->attr.pointer)
{
/* Nullify and automatic deallocation of allocatable
......
2018-09-17 Paul Thomas <pault@gcc.gnu.org>
PR fortran/64120
* gfortran.dg/allocatable_scalar_14.f90 : New test.
2018-09-17 Richard Biener <rguenther@suse.de>
PR tree-optimization/87301
......
! { dg-do run }
!
! Test the fix for PR64120 in which the initialisation of the
! string length of 's' was not being done.
!
! Contributed by Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
!
call g(1)
call g(2)
contains
subroutine g(x)
integer :: x
character(len=x), allocatable :: s
allocate(s)
if (len(s) .ne. x) stop x
end subroutine
end
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