+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
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.
/* Special case: String arguments which compare equal can have
different lengths, which makes them different in calls to
procedures. */
-
+
if (e1->expr_type == EXPR_CONSTANT
&& e1->ts.type == BT_CHARACTER
&& e2->expr_type == EXPR_CONSTANT
/* Determine if an array ref, usually an array section specifies the
entire array. In addition, if the second, pointer argument is
provided, the function will return true if the reference is
- contiguous; eg. (:, 1) gives true but (1,:) gives false.
+ contiguous; eg. (:, 1) gives true but (1,:) gives false.
If one of the bounds depends on a dummy variable which is
not INTENT(IN), also return false, because the user may
have changed the variable. */
/* See PR 41453. */
&& !e->symtree->n.sym->attr.dummy
/* FIXME - PR 87395 and PR 41453 */
- && e->symtree->n.sym->attr.save == SAVE_NONE
+ && e->symtree->n.sym->attr.save == SAVE_NONE
&& !e->symtree->n.sym->attr.associate_var
&& e->ts.type != BT_CHARACTER && e->ts.type != BT_DERIVED
&& e->ts.type != BT_CLASS && !sym->attr.elemental;
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.
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
- text = ADJUSTL(text(2:)) ! Note dependency.
+ 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
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