Commit 29a94bf9 by Paul Thomas

re PR fortran/65677 (Incomplete assignment on deferred-length character variable)

2018-09-29  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/65667
	* trans-expr.c (gfc_trans_assignment_1): If there is dependency
	fix the rse stringlength.

2018-09-29  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/65667
	* gfortran.dg/dependency_52.f90 : New test.

From-SVN: r264715
parent 7d583f42
2018-09-29 Paul Thomas <pault@gcc.gnu.org>
PR fortran/65667
* trans-expr.c (gfc_trans_assignment_1): If there is dependency
fix the rse stringlength.
2018-09-25 Martin Liska <mliska@suse.cz>
PR fortran/87394
......
......@@ -10207,7 +10207,11 @@ gfc_trans_assignment_1 (gfc_expr * expr1, gfc_expr * expr2, bool init_flag,
|| TREE_CODE (rse.string_length) == INDIRECT_REF))
string_length = gfc_evaluate_now (rse.string_length, &rse.pre);
else if (expr2->ts.type == BT_CHARACTER)
string_length = rse.string_length;
{
if (expr1->ts.deferred && gfc_check_dependency (expr1, expr2, false))
rse.string_length = gfc_evaluate_now (rse.string_length, &rse.pre);
string_length = rse.string_length;
}
else
string_length = NULL_TREE;
......
2018-09-29 Paul Thomas <pault@gcc.gnu.org>
PR fortran/65667
* gfortran.dg/dependency_52.f90 : New test.
2018-09-29 Jakub Jelinek <jakub@redhat.com>
PR target/87467
......
! { dg-do run }
!
! Test the fix for PR65667, in which the dependency was missed and
! the string length of 'text' was decremented twice. The rhs string
! length is now fixed after the function call so that the dependency
! on the length of 'text' is removed for later evaluations.
!
!Contributed by John <jwmwalrus@gmail.com>
!
module mod1
implicit none
contains
subroutine getKeyword(string, keyword, rest)
character(:), allocatable, intent(IN) :: string
character(:), allocatable, intent(OUT) :: keyword, rest
integer :: idx
character(:), allocatable :: text
keyword = ''
rest = ''
text = string
text = ADJUSTL(text(2:)) ! Note dependency.
idx = INDEX(text, ' ')
if (idx == 0) then
keyword = TRIM(text)
else
keyword = text(:idx-1)
rest = TRIM(ADJUSTL(text(idx+1:)))
endif
end subroutine
end module mod1
use mod1
implicit none
character(:), allocatable :: line, keyword, rest
line = '@HERE IT IS'
call getKeyword(line, keyword, rest)
if (keyword .ne. 'HERE') stop 1
if (rest .ne. 'IT IS') stop 2
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment