diff options
author | pault <pault@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-10-19 12:51:06 +0000 |
---|---|---|
committer | pault <pault@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-10-19 12:51:06 +0000 |
commit | caea6886971070e9515943fbff40abbc4f289bbc (patch) | |
tree | e8a02b5d2c8cd96f8b9725922ae6db6ec89ed79d | |
parent | f93afdfbbaf98bb77a3b1cd6338b6edbb8c4df3f (diff) | |
download | ppe42-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/dependency.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/dependency_22.f90 | 28 |
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 + + |