This is the mail archive of the gcc-patches@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]

[Patch, fortran] Bug 68241 - [meta-bug] Deferred-length character - PRs49630, 54070, 60593, 60795, 61147, 63232 and 64324


Dear All,

This is a further instalment of deferred character length fixes. I
have listed the status of all the deferred length PRs that I know of
in an attachment. As far as I can see, there are five left that are
really concerned with deferred character length functionality.

In terms of the number of PRs fixed, this patch is rather less
impressive than it looks. Essentially four things have been fixed:
(i) Deferred character length results are passed by reference and so,
within the procedure itself, they are consistently indirectly
referenced;
(ii) The deferred character types are made correctly by indirectly
referencing the character length;
(iii) Array references to deferred character arrays use pointer arithmetic; and
(iv) Scalar assignments to unallocated arrays are trapped at runtime
with -fcheck=mem.

A minor tweak was required to fix PR64324 because deferred length
characters were being misidentified as assumed length.

The ChangeLog is clear as to what has been done. The only point on
which I am uncertain is that of making the length parameter of
deferred character length procedure results TREE_STATIC. This was
required to make the patch function correctly at any level of
optimization. Is this the best and/or only way of doing this?

Bootstrapped and regtested on FC21/x86_64 - OK for trunk and, after a
decent interval, 5 branch?

Cheers

Paul

2016-01-09  Paul Thomas  <pault@gcc.gnu.org>

    PR fortran/64324
    * resolve.c (check_uop_procedure): Prevent deferred length
    characters from being trapped by assumed length error.

    PR fortran/49630
    PR fortran/54070
    PR fortran/60593
    PR fortran/60795
    PR fortran/61147
    PR fortran/64324
    * trans-array.c (gfc_conv_scalarized_array_ref): Pass decl for
    function as well as variable expressions.
    * trans.c (gfc_build_array_ref): Expand logic for setting span
    to include indirect references to character lengths.
    * trans-decl.c (gfc_get_symbol_decl): Ensure that deferred
    result char lengths that are PARM_DECLs are indirectly
    referenced both for directly passed and by reference.
    (create_function_arglist): If the length type is a pointer type
    then store the length as the 'passed_length' and make the char
    length an indirect reference to it.
    (gfc_trans_deferred_vars): If a character length has escaped
    being set as an indirect reference, return it via the 'passed
    length'.
    * trans-expr.c (gfc_conv_procedure_call): The length of
    deferred character length results is set TREE_STATIC and set to
    zero.
    (gfc_trans_assignment_1): Do not fix the rse string_length if
    it is a variable, a parameter or an indirect reference. Add the
    code to trap assignment of scalars to unallocated arrays.
    * trans-stmt.c (gfc_trans_allocate): Remove 'def_str_len' and
    all references to it. Instead, replicate the code to obtain a
    explicitly defined string length and provide a value before
    array allocation so that the dtype is correctly set.
    trans-types.c (gfc_get_character_type): If the character length
    is a pointer, use the indirect reference.

2016-01-09  Paul Thomas  <pault@gcc.gnu.org>

    PR fortran/49630
    * gfortran.dg/deferred_character_13.f90: New test for the fix
    of comment 3 of the PR.

    PR fortran/54070
    * gfortran.dg/deferred_character_8.f90: New test
    * gfortran.dg/allocate_error_5.f90: New test

    PR fortran/60593
    * gfortran.dg/deferred_character_10.f90: New test

    PR fortran/60795
    * gfortran.dg/deferred_character_14.f90: New test

    PR fortran/61147
    * gfortran.dg/deferred_character_11.f90: New test

    PR fortran/64324
    * gfortran.dg/deferred_character_9.f90: New test

Attachment: submit.diff
Description: Text document

Attachment: status.txt
Description: Text document


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