re PR fortran/37723 (wrong result for left-right hand side array overlap and (possibl...
authorPaul Thomas <pault@gcc.gnu.org>
Sun, 19 Oct 2008 12:51:06 +0000 (12:51 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Sun, 19 Oct 2008 12:51:06 +0000 (12:51 +0000)
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

gcc/fortran/ChangeLog
gcc/fortran/dependency.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/dependency_22.f90 [new file with mode: 0644]

index d4ff6b3..4c35019 100644 (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
index 05a3dcc..44187fe 100644 (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)
index eaf1f2b..0d2ef19 100644 (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
diff --git a/gcc/testsuite/gfortran.dg/dependency_22.f90 b/gcc/testsuite/gfortran.dg/dependency_22.f90
new file mode 100644 (file)
index 0000000..bedf702
--- /dev/null
@@ -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
+
+