From 9d5833a6fe654ce7d2d06671c7036eb8ac8708ce Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Sun, 29 Apr 2007 06:16:45 +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: r124270 --- 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 4999d3be564d..2387a80fb22c 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-27 Brooks Moses * intrinsic.texi (Transfer): Improve documentation. diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 93916337fb78..53427f297c7a 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -2826,6 +2826,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 bdfa44307a94..dccbe124c469 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 Ian Lance Taylor PR middle-end/31710 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