Commit b093d688 by Paul Thomas

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

2018-10-01  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/65677
	* trans-expr.c (gfc_trans_assignment_1): Set the 'identical'
	flag in the call to gfc_check_dependency.


2018-10-01  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/65677
	* gfortran.dg/dependency_52.f90 : Expand the test to check both
	the call to adjustl and direct assignment of the substring.

From-SVN: r264759
parent fd5c626c
2018-10-01 Paul Thomas <pault@gcc.gnu.org>
PR fortran/65677
* trans-expr.c (gfc_trans_assignment_1): Set the 'identical'
flag in the call to gfc_check_dependency.
2018-09-30 Paul Thomas <pault@gcc.gnu.org>
PR fortran/87359
......@@ -33,7 +39,7 @@
2018-09-29 Paul Thomas <pault@gcc.gnu.org>
PR fortran/65667
PR fortran/65677
* trans-expr.c (gfc_trans_assignment_1): If there is dependency
fix the rse stringlength.
......
......@@ -10208,7 +10208,7 @@ gfc_trans_assignment_1 (gfc_expr * expr1, gfc_expr * expr2, bool init_flag,
string_length = gfc_evaluate_now (rse.string_length, &rse.pre);
else if (expr2->ts.type == BT_CHARACTER)
{
if (expr1->ts.deferred && gfc_check_dependency (expr1, expr2, false))
if (expr1->ts.deferred && gfc_check_dependency (expr1, expr2, true))
rse.string_length = gfc_evaluate_now (rse.string_length, &rse.pre);
string_length = rse.string_length;
}
......
2018-10-01 Paul Thomas <pault@gcc.gnu.org>
PR fortran/65677
* gfortran.dg/dependency_52.f90 : Expand the test to check both
the call to adjustl and direct assignment of the substring.
2018-10-01 Richard Biener <rguenther@suse.de>
PR tree-optimization/87465
......
! { dg-do run }
!
! Test the fix for PR65667, in which the dependency was missed and
! Test the fix for PR65677, 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.
......@@ -10,16 +10,21 @@
module mod1
implicit none
contains
subroutine getKeyword(string, keyword, rest)
subroutine getKeyword(string, keyword, rest, use_adjustl)
character(:), allocatable, intent(IN) :: string
character(:), allocatable, intent(OUT) :: keyword, rest
integer :: idx
character(:), allocatable :: text
logical :: use_adjustl
keyword = ''
rest = ''
text = string
if (use_adjustl) then
text = ADJUSTL(text(2:)) ! Note dependency.
else
text = text(2:) ! Check the old workaround.
endif
idx = INDEX(text, ' ')
if (idx == 0) then
......@@ -38,8 +43,17 @@ end module mod1
line = '@HERE IT IS'
call getKeyword(line, keyword, rest)
call getKeyword(line, keyword, rest, use_adjustl = .true.)
if (keyword .ne. 'HERE') stop 1
if (rest .ne. 'IT IS') stop 2
deallocate (line, keyword, rest)
line = '@HERE IT IS'
call getKeyword(line, keyword, rest, use_adjustl = .false.)
if (keyword .ne. 'HERE') stop 3
if (rest .ne. 'IT IS') stop 4
deallocate (line, keyword, rest)
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