From: Daniel Franke Date: Sat, 6 Jun 2009 21:09:57 +0000 (-0400) Subject: re PR fortran/37203 (Check ORDER= of RESHAPE) X-Git-Tag: releases/gcc-4.5.0~5344 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f7cfd28c03650adee94bf775ef7b88156ac9e70e;p=thirdparty%2Fgcc.git re PR fortran/37203 (Check ORDER= of RESHAPE) 2009-06-06 Daniel Franke PR fortran/37203 * simplify.c (gfc_simplify_reshape): Fixed reshaping of empty * arrays without padding. 2009-06-06 Daniel Franke PR fortran/37203 * reshape_zerosize_2.f90: New. From-SVN: r148238 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index b50949f75790..711367a3e1e0 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2009-06-06 Daniel Franke + + PR fortran/37203 + * simplify.c (gfc_simplify_reshape): Fixed reshaping of empty arrays + without padding. + 2009-06-06 Daniel Franke PR fortran/32890 diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index 09cf29781880..737f299cc884 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -3808,7 +3808,7 @@ gfc_simplify_reshape (gfc_expr *source, gfc_expr *shape_exp, for (i = 0; i < rank; i++) x[i] = 0; - for (;;) + while (nsource > 0 || npad > 0) { /* Figure out which element to extract. */ mpz_set_ui (index, 0); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ca9f04fc03d9..6b87e85c1edb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-06-06 Daniel Franke + + PR fortran/37203 + * reshape_zerosize_2.f90: New. + 2009-06-06 Daniel Franke PR fortran/32890 diff --git a/gcc/testsuite/gfortran.dg/reshape_zerosize_2.f90 b/gcc/testsuite/gfortran.dg/reshape_zerosize_2.f90 new file mode 100644 index 000000000000..cdbee42aa6c8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/reshape_zerosize_2.f90 @@ -0,0 +1,11 @@ +! { dg-do "run" } + + ! Simplifier of RESHAPE was broken when reshaping an empty array. + INTEGER, PARAMETER :: empty(0,0) = RESHAPE(SHAPE(1), (/0, 0/)) + + ! same with surplus padding + INTEGER, PARAMETER :: empty_padding(0,0) = RESHAPE(SHAPE(1), (/0, 0/), PAD=( (/ 1, 2 /) )) + + ! same with required padding + INTEGER, PARAMETER :: non_empty(2,2) = RESHAPE(SHAPE(1), (/2, 2/), PAD=( (/ 1, 2 /) )) +END