2015-11-15 Paul Thomas <pault@gcc.gnu.org>
commitee91fa6b4661aec1d86a032b35e7c0e089a7e52a
authorpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 15 Nov 2015 14:07:52 +0000 (15 14:07 +0000)
committerpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 15 Nov 2015 14:07:52 +0000 (15 14:07 +0000)
tree68e0ae5b8618edca499acc51ced992350c7d50fa
parent6bf8cb11aacc456333f2832435dd8b5a8b19f259
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@230396 138bc75d-0d04-0410-961f-82ee72b054a4
14 files changed:
gcc/fortran/ChangeLog
gcc/fortran/resolve.c
gcc/fortran/trans-array.c
gcc/fortran/trans-expr.c
gcc/fortran/trans-stmt.c
gcc/fortran/trans.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/deferred_character_1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/deferred_character_2.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/deferred_character_3.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/deferred_character_4.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/deferred_character_5.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/deferred_character_6.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/deferred_character_7.f90 [new file with mode: 0644]