2016-01-15 Paul Thomas <pault@gcc.gnu.org>
commitddcfeaf129d75f4511c5e7d066ad9eeb5124f3f1
authorpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 15 Jan 2016 20:33:58 +0000 (15 20:33 +0000)
committerpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 15 Jan 2016 20:33:58 +0000 (15 20:33 +0000)
tree415abc4f91d8bf24a1d9431d1b2927b149a88784
parentb3a355d616d4b29627c0a83b231be4e2d31ce0bc
2016-01-15  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.
(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-01-15  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

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@232450 138bc75d-0d04-0410-961f-82ee72b054a4
17 files changed:
gcc/fortran/ChangeLog
gcc/fortran/resolve.c
gcc/fortran/trans-array.c
gcc/fortran/trans-decl.c
gcc/fortran/trans-expr.c
gcc/fortran/trans-stmt.c
gcc/fortran/trans-types.c
gcc/fortran/trans.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/allocate_error_5.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/deferred_character_10.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/deferred_character_11.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/deferred_character_12.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/deferred_character_13.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/deferred_character_14.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/deferred_character_8.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/deferred_character_9.f90 [new file with mode: 0644]