From f7cfd28c03650adee94bf775ef7b88156ac9e70e Mon Sep 17 00:00:00 2001 From: Daniel Franke Date: Sat, 6 Jun 2009 17:09:57 -0400 Subject: [PATCH] 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 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/simplify.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/reshape_zerosize_2.f90 | 11 +++++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/reshape_zerosize_2.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index b50949f7579..711367a3e1e 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 09cf2978188..737f299cc88 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 ca9f04fc03d..6b87e85c1ed 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 00000000000..cdbee42aa6c --- /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