aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/dependency.c
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2008-10-19 12:51:06 +0000
committerPaul Thomas <pault@gcc.gnu.org>2008-10-19 12:51:06 +0000
commit18c87fd57137460489f1db65b9983779d9f2c24c (patch)
treee8a02b5d2c8cd96f8b9725922ae6db6ec89ed79d /gcc/fortran/dependency.c
parent884f855cf924b4d883c4cfa9e449618dc23b8bca (diff)
downloadgcc-18c87fd57137460489f1db65b9983779d9f2c24c.zip
gcc-18c87fd57137460489f1db65b9983779d9f2c24c.tar.gz
gcc-18c87fd57137460489f1db65b9983779d9f2c24c.tar.bz2
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
Diffstat (limited to 'gcc/fortran/dependency.c')
-rw-r--r--gcc/fortran/dependency.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/fortran/dependency.c b/gcc/fortran/dependency.c
index 05a3dcc..44187fe 100644
--- a/gcc/fortran/dependency.c
+++ b/gcc/fortran/dependency.c
@@ -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)