summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2009-06-06 21:09:57 +0000
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2009-06-06 21:09:57 +0000
commitc77b5b3cc40d2b9aa323b95f21a9d12eb1ec5b3a (patch)
tree6461a1a3ba9b0a3a1a595f3cf0693b8f544bb7a7 /gcc
parent37a44ee4ffbeffe7acea29c40a33259df3569fa0 (diff)
downloadgcc-c77b5b3cc40d2b9aa323b95f21a9d12eb1ec5b3a.tar.gz
2009-06-06 Daniel Franke <franke.daniel@gmail.com>
PR fortran/37203 * simplify.c (gfc_simplify_reshape): Fixed reshaping of empty * arrays without padding. 2009-06-06 Daniel Franke <franke.daniel@gmail.com> PR fortran/37203 * reshape_zerosize_2.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@148238 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/simplify.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/reshape_zerosize_2.f9011
4 files changed, 23 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index b50949f7579..711367a3e1e 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,11 @@
2009-06-06 Daniel Franke <franke.daniel@gmail.com>
+ PR fortran/37203
+ * simplify.c (gfc_simplify_reshape): Fixed reshaping of empty arrays
+ without padding.
+
+2009-06-06 Daniel Franke <franke.daniel@gmail.com>
+
PR fortran/32890
* intrinsic.h (gfc_simplify_pack): New prototype.
* intrinsic.c (add_functions): Added
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,5 +1,10 @@
2009-06-06 Daniel Franke <franke.daniel@gmail.com>
+ PR fortran/37203
+ * reshape_zerosize_2.f90: New.
+
+2009-06-06 Daniel Franke <franke.daniel@gmail.com>
+
PR fortran/32890
* gfortran.dg/pack_assign_1.f90: New.
* gfortran.dg/pack_vector_1.f90: New.
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