diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2007-04-29 05:10:22 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2007-04-29 05:10:22 +0000 |
commit | 4f06d65b44483f00dd2397321cf599e4066950c3 (patch) | |
tree | 11549f2341c1d06579bf77fc3a920ae6e8098c82 | |
parent | d10fb73e919c22a50a241b33b6a0d10aa752f70a (diff) | |
download | gcc-4f06d65b44483f00dd2397321cf599e4066950c3.zip gcc-4f06d65b44483f00dd2397321cf599e4066950c3.tar.gz gcc-4f06d65b44483f00dd2397321cf599e4066950c3.tar.bz2 |
re PR fortran/31711 (was "rhs array is changed while assiging to same lhs array")
2007-04-29 Paul Thomas <pault@gcc.gnu.org>
PR fortran/31711
* trans-array.c (gfc_conv_resolve_dependencies): Create a temp
whenever a dependency is found.
2007-04-29 Paul Thomas <pault@gcc.gnu.org>
PR fortran/31711
* gfortran.dg/dependency_21.f90: New test.
From-SVN: r124269
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/trans-array.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/dependency_21.f90 | 21 |
4 files changed, 34 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index ef1d6cb..6bba251 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2007-04-29 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/31711 + * trans-array.c (gfc_conv_resolve_dependencies): Create a temp + whenever a dependency is found. + 2007-04-28 Tobias Schlüter <tobi@gcc.gnu.org> * options.c (gfc_handle_option): Ensure requested free form line diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index b6a2ac0..92fd67c 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -3001,6 +3001,8 @@ gfc_conv_resolve_dependencies (gfc_loopinfo * loop, gfc_ss * dest, rref = ss->expr->ref; nDepend = gfc_dep_resolver (lref, rref); + if (nDepend == 1) + break; #if 0 /* TODO : loop shifting. */ if (nDepend == 1) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e309739..c064f17 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-04-29 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/31711 + * gfortran.dg/dependency_21.f90: New test. + 2007-04-27 Jerry DeLisle <jvdelisle@gcc.gnu.org> * gfortran.dg/secnds.f: Use real*8. diff --git a/gcc/testsuite/gfortran.dg/dependency_21.f90 b/gcc/testsuite/gfortran.dg/dependency_21.f90 new file mode 100644 index 0000000..ca25458 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dependency_21.f90 @@ -0,0 +1,21 @@ +! { dg-do run } +! Test the fix for PR31711 in which the dependency in the assignment +! at line 18 was detected and then ignored. +! +! Contributed by Tobias Ivarsson <thobes@gmail.com> +! +program laplsolv + IMPLICIT NONE + integer, parameter :: n = 2 + double precision,dimension(0:n+1, 0:n+1) :: T + integer :: i + + T=0.0 + T(0:n+1 , 0) = 1.0 + T(0:n+1 , n+1) = 1.0 + T(n+1 , 0:n+1) = 2.0 + + T(1:n,1)=(T(0:n-1,1)+T(1:n,1+1)+1d0) + + if (any (T(1:n,1) .ne. 1d0 )) call abort () +end program laplsolv |