+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
|| 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;
--- /dev/null
+! { 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