Commit 18c87fd5 by Paul Thomas

re PR fortran/37723 (wrong result for left-right hand side array overlap and…

re PR fortran/37723 (wrong result for left-right hand side array overlap and (possibly) negative strides)

2008-10-19  Paul Thomas  <pault@gcc.gnu.org>

        PR fortran/37723
        * dependency.c (gfc_dep_resolver ): If we find equal array
	element references, go on to the next reference.

2008-10-19  Paul Thomas  <pault@gcc.gnu.org>

        PR fortran/37723
        * gfortran.dg/dependency_22.f90: New test.

From-SVN: r141221
parent 884f855c
2008-10-19 Paul Thomas <pault@gcc.gnu.org>
PR fortran/37723
* dependency.c (gfc_dep_resolver ): If we find equal array
element references, go on to the next reference.
2008-10-16 Daniel Kraft <d@domob.eu> 2008-10-16 Daniel Kraft <d@domob.eu>
* resolve.c (resolve_elemental_actual): Handle calls to intrinsic * resolve.c (resolve_elemental_actual): Handle calls to intrinsic
......
...@@ -1252,6 +1252,14 @@ gfc_dep_resolver (gfc_ref *lref, gfc_ref *rref) ...@@ -1252,6 +1252,14 @@ gfc_dep_resolver (gfc_ref *lref, gfc_ref *rref)
if (this_dep > fin_dep) if (this_dep > fin_dep)
fin_dep = this_dep; fin_dep = this_dep;
} }
/* If this is an equal element, we have to keep going until we find
the "real" array reference. */
if (lref->u.ar.type == AR_ELEMENT
&& rref->u.ar.type == AR_ELEMENT
&& fin_dep == GFC_DEP_EQUAL)
break;
/* Exactly matching and forward overlapping ranges don't cause a /* Exactly matching and forward overlapping ranges don't cause a
dependency. */ dependency. */
if (fin_dep < GFC_DEP_OVERLAP) if (fin_dep < GFC_DEP_OVERLAP)
......
2008-10-19 Paul Thomas <pault@gcc.gnu.org>
PR fortran/37723
* gfortran.dg/dependency_22.f90: New test.
2008-10-18 Danny Smith <dannysmith@users.sourceforge.net> 2008-10-18 Danny Smith <dannysmith@users.sourceforge.net>
* gcc.dg/dll-2.c: Revert 2008-08-09 change (R138893): Change * gcc.dg/dll-2.c: Revert 2008-08-09 change (R138893): Change
......
! { dg-do run }
!
! Test the fix for PR37723 in which the array element reference masked the dependency
! by inhibiting the test.
!
! Contributed by Dick Hendrickson <dick.hendrickson@gmail.com>
!
program try_cg0071
type seq
integer ia(10)
end type
TYPE(SEQ) UDA1R
type(seq) uda(1)
do j1 = 1,10
uda1r%ia(j1) = j1
enddo
uda = uda1r
UDA(1)%IA(1:9) = UDA(1)%IA(9:1:-1)+1
DO J1 = 1,9
if (UDA1R%IA(10-J1)+1 /= Uda(1)%IA(J1)) call abort()
ENDDO
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