[Bug fortran/64324] Deferred character specific functions not permitted in generic operator interface
pault at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Mar 9 20:50:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64324
--- Comment #5 from Paul Thomas <pault at gcc dot gnu.org> ---
Author: pault
Date: Wed Mar 9 20:49:58 2016
New Revision: 234093
URL: https://gcc.gnu.org/viewcvs?rev=234093&root=gcc&view=rev
Log:
2016-03-09 Paul Thomas <pault@gcc.gnu.org>
Backport from trunk.
PR fortran/69423
* trans-decl.c (create_function_arglist): Deferred character
length functions, with and without declared results, address
the passed reference type as '.result' and the local string
length as '..result'.
(gfc_null_and_pass_deferred_len): Helper function to null and
return deferred string lengths, as needed.
(gfc_trans_deferred_vars): Call it, thereby reducing repeated
code, add call for deferred arrays and reroute pointer function
results. Avoid using 'tmp' for anything other that a temporary
tree by introducing 'type_of_array' for the arrayspec type.
2016-03-09 Paul Thomas <pault@gcc.gnu.org>
Backport from trunk.
PR fortran/64324
* resolve.c (check_uop_procedure): Prevent deferred length
characters from being trapped by assumed length error.
Backport from trunk.
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.
(gfc_array_init_size): Add 'expr' as an argument. Use this to
correctly set the descriptor dtype for deferred characters.
(gfc_array_allocate): Add 'expr' to the call to
'gfc_array_init_size'.
* 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-03-09 Paul Thomas <pault@gcc.gnu.org>
Backport from trunk.
PR fortran/69423
* gfortran.dg/deferred_character_15.f90 : New test.
2016-03-09 Paul Thomas <pault@gcc.gnu.org>
Backport from trunk.
PR fortran/49630
* gfortran.dg/deferred_character_13.f90: New test for the fix
of comment 3 of the PR.
Backport from trunk.
PR fortran/54070
* gfortran.dg/deferred_character_8.f90: New test
* gfortran.dg/allocate_error_5.f90: New test
Backport from trunk.
PR fortran/60593
* gfortran.dg/deferred_character_10.f90: New test
Backport from trunk.
PR fortran/60795
* gfortran.dg/deferred_character_14.f90: New test
Backport from trunk.
PR fortran/61147
* gfortran.dg/deferred_character_11.f90: New test
Backport from trunk.
PR fortran/64324
* gfortran.dg/deferred_character_9.f90: New test
Added:
branches/gcc-5-branch/gcc/testsuite/gfortran.dg/allocate_error_5.f90
branches/gcc-5-branch/gcc/testsuite/gfortran.dg/deferred_character_10.f90
branches/gcc-5-branch/gcc/testsuite/gfortran.dg/deferred_character_11.f90
branches/gcc-5-branch/gcc/testsuite/gfortran.dg/deferred_character_12.f90
branches/gcc-5-branch/gcc/testsuite/gfortran.dg/deferred_character_13.f90
branches/gcc-5-branch/gcc/testsuite/gfortran.dg/deferred_character_14.f90
branches/gcc-5-branch/gcc/testsuite/gfortran.dg/deferred_character_15.f90
branches/gcc-5-branch/gcc/testsuite/gfortran.dg/deferred_character_8.f90
branches/gcc-5-branch/gcc/testsuite/gfortran.dg/deferred_character_9.f90
Modified:
branches/gcc-5-branch/gcc/fortran/ChangeLog
branches/gcc-5-branch/gcc/fortran/resolve.c
branches/gcc-5-branch/gcc/fortran/trans-array.c
branches/gcc-5-branch/gcc/fortran/trans-decl.c
branches/gcc-5-branch/gcc/fortran/trans-expr.c
branches/gcc-5-branch/gcc/fortran/trans-stmt.c
branches/gcc-5-branch/gcc/fortran/trans-types.c
branches/gcc-5-branch/gcc/fortran/trans.c
branches/gcc-5-branch/gcc/testsuite/ChangeLog
More information about the Gcc-bugs
mailing list