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:
parent
884f855cf9
commit
18c87fd571
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
28
gcc/testsuite/gfortran.dg/dependency_22.f90
Normal file
28
gcc/testsuite/gfortran.dg/dependency_22.f90
Normal 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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user