Hi Paul,

> The fix for PR9601 is rather trivial and is the last chunk of the patch.
> Finding the fix for PR96100 took a silly amount of time but it now looks
> rather obvious. Trying to evaluate the string length by calling
> gfc_conv_expr_descriptor, when this function is already failing to find it
> is kind of doomed to failure :-) Therefore, gfc_conv_expr is used with
> tse.descriptor_only set. This has the effect of ignoring trailing array
> references and making use of gfc_conv_component_ref's being able to extract
> the hidden string length for deferred length components. Finally, the
> string length of the first element in the array constructor is set if this
> is a deferred length component.

The patch seems to be effective. Albeit I don't understand why, when it is a
parenthesis op, you deduce that this has to be the string length?

The explanation for the second fix left me completely lost.

> Regtests OK on FC31/x86_64 - OK for master?

Tests ok with no regression. Therefore ok by me.

Regards,
        Andre
>
> Paul
>
> This patch fixes PR96100 and PR96101 by making some minor changes to
> the evaluation of string lengths for gfc_conv_expr_descriptor.
>
> 2020-08-13  Paul Thomas  <pa...@gcc.gnu.org>
>
> gcc/fortran
> PR fortran/96100
> PR fortran/96101
> * trans-array.c (get_array_charlen): Tidy up the evaluation of
> the string length for array constructors. Avoid trailing array
> references. Ensure string lengths of deferred length components
> are set. For parentheses operator apply string  length to both
> the primary expression and the enclosed expression.
>
> gcc/testsuite/
> PR fortran/96100
> PR fortran/96101
> * gfortran.dg/char_length_23.f90: New test.


--
Andre Vehreschild * Email: vehre ad gmx dot de

Reply via email to