aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/dependency.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/dependency_1.f9011
4 files changed, 24 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index db3d063..fc3cfe3 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2005-09-16 Paul Brook <paul@codesourcery.com>
+
+ PR fortran/23906
+ * dependency.c (transform_sections): Divide by correct value.
+ Elaborate comment.
+
2005-09-14 Paul Thomas <pault@gcc.gnu.org>
PR fortran/21875 Internal Unit Array I/O, NIST
diff --git a/gcc/fortran/dependency.c b/gcc/fortran/dependency.c
index 9c6b4f6..b93808a 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 e9b96a9..c0a3744 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-09-16 Paul Brook <paul@codesourcery.com>
+
+ PR fortran/23906
+ * gfortran.dg/dependency_1.f90: New test.
+
2005-09-15 Mark Mitchell <mark@codesourcery.com>
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 0000000..5a5a898
--- /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
+