diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index cbdf82d63eb4..987bc50d5397 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2007-03-08 Paul Thomas + + PR fortran/31011 + * expr.c (find_array_section): Correct arithmetic for section + size. + 2007-03-07 Brooks Moses * iresolve.c (gfc_resolve_ishftc): Correct s_kind value. diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index dbe51888656b..06f4d20ef45c 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -1137,8 +1137,7 @@ find_array_section (gfc_expr *expr, gfc_ref *ref) } /* Calculate the number of elements and the shape. */ - mpz_abs (tmp_mpz, stride[d]); - mpz_div (tmp_mpz, stride[d], tmp_mpz); + mpz_set (tmp_mpz, stride[d]); mpz_add (tmp_mpz, end[d], tmp_mpz); mpz_sub (tmp_mpz, tmp_mpz, ctr[d]); mpz_div (tmp_mpz, tmp_mpz, stride[d]); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 81dd95db41bd..6267c8ad8fd3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-03-08 Paul Thomas + + PR fortran/31011 + * gfortran.dg/parameter_array_section_2.f90: New test. + 2007-03-08 Volker Reichelt PR c++/30852 diff --git a/gcc/testsuite/gfortran.dg/parameter_array_section_2.f90 b/gcc/testsuite/gfortran.dg/parameter_array_section_2.f90 new file mode 100644 index 000000000000..aa212c050fa9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/parameter_array_section_2.f90 @@ -0,0 +1,14 @@ +! { dg-do run } +! { dg-options "-O" } +! Test the fix for PR31011 in which the length of the array sections +! with stride other than unity were incorrectly calculated. +! +! Contributed by +! +program PotentialMatrix + implicit none + real(kind=8),dimension(2),parameter::v2=(/1,2/) + real(kind=8),dimension(4),parameter::v4=(/1,2,3,4/) + if (any (v2*v4(1:3:2) .ne. (/1,6/))) call abort () + if (any (v2*v4(3:1:-2) .ne. (/3,2/))) call abort () +end