From 4f06d65b44483f00dd2397321cf599e4066950c3 Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Sun, 29 Apr 2007 05:10:22 +0000 Subject: [PATCH] re PR fortran/31711 (was "rhs array is changed while assiging to same lhs array") 2007-04-29 Paul Thomas PR fortran/31711 * trans-array.c (gfc_conv_resolve_dependencies): Create a temp whenever a dependency is found. 2007-04-29 Paul Thomas PR fortran/31711 * gfortran.dg/dependency_21.f90: New test. From-SVN: r124269 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/trans-array.c | 2 ++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/dependency_21.f90 | 21 +++++++++++++++++++++ 4 files changed, 34 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/dependency_21.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index ef1d6cb6d37b..6bba251dc48b 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2007-04-29 Paul Thomas + + PR fortran/31711 + * trans-array.c (gfc_conv_resolve_dependencies): Create a temp + whenever a dependency is found. + 2007-04-28 Tobias Schlüter * 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 b6a2ac029634..92fd67cccf50 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 e30973905861..c064f174fc5b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-04-29 Paul Thomas + + PR fortran/31711 + * gfortran.dg/dependency_21.f90: New test. + 2007-04-27 Jerry DeLisle * 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 000000000000..ca25458f7f27 --- /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 +! +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