diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2008-10-19 12:51:06 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2008-10-19 12:51:06 +0000 |
commit | 18c87fd57137460489f1db65b9983779d9f2c24c (patch) | |
tree | e8a02b5d2c8cd96f8b9725922ae6db6ec89ed79d /gcc/fortran/dependency.c | |
parent | 884f855cf924b4d883c4cfa9e449618dc23b8bca (diff) | |
download | gcc-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.c | 8 |
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) |