summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>2008-10-19 12:51:06 +0000
committerpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>2008-10-19 12:51:06 +0000
commitcaea6886971070e9515943fbff40abbc4f289bbc (patch)
treee8a02b5d2c8cd96f8b9725922ae6db6ec89ed79d
parentf93afdfbbaf98bb77a3b1cd6338b6edbb8c4df3f (diff)
downloadppe42-gcc-caea6886971070e9515943fbff40abbc4f289bbc.tar.gz
ppe42-gcc-caea6886971070e9515943fbff40abbc4f289bbc.zip
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@141221 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/dependency.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/dependency_22.f9028
4 files changed, 47 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index d4ff6b34c30..4c350199bb4 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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
diff --git a/gcc/fortran/dependency.c b/gcc/fortran/dependency.c
index 05a3dccf1a9..44187fe8153 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)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index eaf1f2b8853..0d2ef196bff 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
diff --git a/gcc/testsuite/gfortran.dg/dependency_22.f90 b/gcc/testsuite/gfortran.dg/dependency_22.f90
new file mode 100644
index 00000000000..bedf702767d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dependency_22.f90
@@ -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
+
+
OpenPOWER on IntegriCloud