]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/37203 (Check ORDER= of RESHAPE)
authorDaniel Franke <franke.daniel@gmail.com>
Sat, 6 Jun 2009 21:09:57 +0000 (17:09 -0400)
committerTobias Burnus <burnus@gcc.gnu.org>
Sat, 6 Jun 2009 21:09:57 +0000 (23:09 +0200)
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.

From-SVN: r148238

gcc/fortran/ChangeLog
gcc/fortran/simplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/reshape_zerosize_2.f90 [new file with mode: 0644]

index b50949f757903d080606b7f70017cd78925cdb69..711367a3e1e0aa9d934f6d7e0a23da48453685ff 100644 (file)
@@ -1,3 +1,9 @@
+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
index 09cf29781880f5107ba2882020ad9bab79d1b4e8..737f299cc8847689f1245835f7754c46bc55f86d 100644 (file)
@@ -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);
index ca9f04fc03d930d7942fd6699ca1bd14c7d83a15..6b87e85c1edb6a61d9e7e4edc04d4e0c5ceec405 100644 (file)
@@ -1,3 +1,8 @@
+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
diff --git a/gcc/testsuite/gfortran.dg/reshape_zerosize_2.f90 b/gcc/testsuite/gfortran.dg/reshape_zerosize_2.f90
new file mode 100644 (file)
index 0000000..cdbee42
--- /dev/null
@@ -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