diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index db3d0637ff2..fc3cfe37838 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2005-09-16 Paul Brook + + PR fortran/23906 + * dependency.c (transform_sections): Divide by correct value. + Elaborate comment. + 2005-09-14 Paul Thomas PR fortran/21875 Internal Unit Array I/O, NIST diff --git a/gcc/fortran/dependency.c b/gcc/fortran/dependency.c index 9c6b4f67773..b93808a2bce 100644 --- a/gcc/fortran/dependency.c +++ b/gcc/fortran/dependency.c @@ -392,7 +392,7 @@ get_deps (mpz_t x1, mpz_t x2, mpz_t y) } -/* Transforms a sections l and r such that +/* Perform the same linear transformation on sections l and r such that (l_start:l_end:l_stride) -> (0:no_of_elements) (r_start:r_end:r_stride) -> (X1:X2) Where r_end is implicit as both sections must have the same number of @@ -434,7 +434,7 @@ transform_sections (mpz_t X1, mpz_t X2, mpz_t no_of_elements, mpz_mul (X2, no_of_elements, r_stride->value.integer); if (l_stride != NULL) - mpz_cdiv_q (X2, X2, r_stride->value.integer); + mpz_cdiv_q (X2, X2, l_stride->value.integer); mpz_add (X2, X2, X1); return 0; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e9b96a98698..c0a37445298 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-09-16 Paul Brook + + PR fortran/23906 + * gfortran.dg/dependency_1.f90: New test. + 2005-09-15 Mark Mitchell PR c++/23896 diff --git a/gcc/testsuite/gfortran.dg/dependency_1.f90 b/gcc/testsuite/gfortran.dg/dependency_1.f90 new file mode 100644 index 00000000000..5a5a898822d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dependency_1.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! PR23906 +! Dependency analysis was using the stride from the wrong expression and +! segfaulting +subroutine foo(a) + real, dimension(:) :: a + + a(1:3:2) = a(1:2) + a(1:2) = a(1:3:2) +end subroutine +