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
This commit is contained in:
Paul Thomas 2008-10-19 12:51:06 +00:00
parent 884f855cf9
commit 18c87fd571
4 changed files with 47 additions and 0 deletions

View File

@ -1,3 +1,9 @@
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>
* resolve.c (resolve_elemental_actual): Handle calls to intrinsic

View File

@ -1252,6 +1252,14 @@ gfc_dep_resolver (gfc_ref *lref, gfc_ref *rref)
if (this_dep > fin_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
dependency. */
if (fin_dep < GFC_DEP_OVERLAP)

View File

@ -1,3 +1,8 @@
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>
* gcc.dg/dll-2.c: Revert 2008-08-09 change (R138893): Change

View File

@ -0,0 +1,28 @@
! { 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