This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug fortran/50221] Allocatable string length fails with array assignment


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=50221

--- Comment #7 from Paul Thomas <pault at gcc dot gnu.org> ---
Author: pault
Date: Sun Nov 15 14:07:52 2015
New Revision: 230396

URL: https://gcc.gnu.org/viewcvs?rev=230396&root=gcc&view=rev
Log:
2015-11-15  Paul Thomas  <pault@gcc.gnu.org>

        PR fortran/50221
        PR fortran/68216
        PR fortran/63932
        PR fortran/66408
        * trans_array.c (gfc_conv_scalarized_array_ref): Pass the
        symbol decl for deferred character length array references.
        * trans-stmt.c (gfc_trans_allocate): Keep the string lengths
        to update deferred length character string lengths.
        * trans-types.c (gfc_get_dtype_rank_type); Use the string
        length of deferred character types for the dtype size.
        * trans.c (gfc_build_array_ref): For references to deferred
        character arrays, use the domain max value, if it is a variable
        to set the 'span' and use pointer arithmetic for acces to the
        element.
        (trans_code): Set gfc_current_locus for diagnostic purposes.

        PR fortran/67674
        * trans-expr.c (gfc_conv_procedure_call): Do not fix deferred
        string lengths of components.

        PR fortran/49954
        * resolve.c (deferred_op_assign): New function.
        (gfc_resolve_code): Call it.
        * trans-array.c (concat_str_length): New function.
        (gfc_alloc_allocatable_for_assignment): Jump directly to alloc/
        realloc blocks for deferred character length arrays because the
        string length might change, even if the shape is the same. Call
        concat_str_length to obtain the string length for concatenation
        since it is needed to compute the lhs string length.
        Set the descriptor dtype appropriately for the new string
        length.
        * trans-expr.c (gfc_trans_assignment_1): Use the rse string
        length for all characters, other than deferred types. For
        concatenation operators, push the rse.pre block to the inner
        most loop so that the temporary pointer and the assignments
        are properly placed.

2015-11-15  Paul Thomas  <pault@gcc.gnu.org>

        PR fortran/50221
        * gfortran.dg/deferred_character_1.f90: New test.
        * gfortran.dg/deferred_character_4.f90: New test for comment
        #4 of the PR.

        PR fortran/68216
        * gfortran.dg/deferred_character_2.f90: New test.

        PR fortran/67674
        * gfortran.dg/deferred_character_3.f90: New test.

        PR fortran/63932
        * gfortran.dg/deferred_character_5.f90: New test.

        PR fortran/66408
        * gfortran.dg/deferred_character_6.f90: New test.

        PR fortran/49954
        * gfortran.dg/deferred_character_7.f90: New test.

Added:
    trunk/gcc/testsuite/gfortran.dg/deferred_character_1.f90
    trunk/gcc/testsuite/gfortran.dg/deferred_character_2.f90
    trunk/gcc/testsuite/gfortran.dg/deferred_character_3.f90
    trunk/gcc/testsuite/gfortran.dg/deferred_character_4.f90
    trunk/gcc/testsuite/gfortran.dg/deferred_character_5.f90
    trunk/gcc/testsuite/gfortran.dg/deferred_character_6.f90
    trunk/gcc/testsuite/gfortran.dg/deferred_character_7.f90
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/resolve.c
    trunk/gcc/fortran/trans-array.c
    trunk/gcc/fortran/trans-expr.c
    trunk/gcc/fortran/trans-stmt.c
    trunk/gcc/fortran/trans.c
    trunk/gcc/testsuite/ChangeLog

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]