aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Schlüter <tobias.schlueter@physik.uni-muenchen.de>2004-09-20 19:22:50 +0200
committerTobias Schlüter <tobi@gcc.gnu.org>2004-09-20 19:22:50 +0200
commitda89fba81fb25d870e75ebf454862752a8562f4c (patch)
treeb01883a01b50c99cbeb0c9385383b50a6bc2e162 /gcc
parent096759ebeca0c3c30de5d37bd53da80020eff2af (diff)
downloadgcc-da89fba81fb25d870e75ebf454862752a8562f4c.zip
gcc-da89fba81fb25d870e75ebf454862752a8562f4c.tar.gz
gcc-da89fba81fb25d870e75ebf454862752a8562f4c.tar.bz2
re PR fortran/15957 (Error in array assignments; 'shape'-related stuff)
fortran/ PR fortran/15957 * simplify.c (gfc_simplify_reshape): Set shape of return value correctly. testsuite/ PR fortran/15957 * gfortran.dg/pr15957.f90: New test. From-SVN: r87764
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/pr15957.f9027
4 files changed, 39 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 9053f36..39f739c 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2004-09-20 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
+
+ PR fortran/15957
+ * simplify.c (gfc_simplify_reshape): Set shape of return value
+ correctly.
+
2004-09-17 Jeffrey D. Oldham <oldham@codesourcery.com>
Zack Weinberg <zack@codesourcery.com>
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
index 61ef50b..a599f89 100644
--- a/gcc/fortran/simplify.c
+++ b/gcc/fortran/simplify.c
@@ -2822,7 +2822,7 @@ inc:
e->shape = gfc_get_shape (rank);
for (i = 0; i < rank; i++)
- mpz_init_set_ui (e->shape[i], shape[order[i]]);
+ mpz_init_set_ui (e->shape[i], shape[i]);
e->ts = head->expr->ts;
e->rank = rank;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3414502..fe487a1 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2004-09-20 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
+
+ PR fortran/15957
+ * gfortran.dg/pr15957.f90: New test.
+
2004-09-20 Dorit Naishlos <dorit@il.ibm.com>
* gcc.dg/vect/vect-74.c: Avoid floating point precision error
diff --git a/gcc/testsuite/gfortran.dg/pr15957.f90 b/gcc/testsuite/gfortran.dg/pr15957.f90
new file mode 100644
index 0000000..b143913
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr15957.f90
@@ -0,0 +1,27 @@
+! { dg-do run }
+! PR 15957
+! we used to return the wrong shape when the order parameter was used
+! in reshape.
+!
+INTEGER, parameter :: i(2,3) = reshape ((/1,2,3,4,5,6/), (/2,3/)), &
+ j(2,4) = reshape ((/1,2,3,4,5,6/), (/2,4/), (/0,0/), (/2,1/))
+
+integer :: k(2,3), m(2,4), n(2,3), o(2,4)
+
+k(1,:) = (/ 1, 3, 5 /)
+k(2,:) = (/ 2, 4, 6 /)
+
+m(1,:) = (/ 1, 2, 3, 4 /)
+m(2,:) = (/ 5, 6, 0, 0 /)
+
+! check that reshape does the right thing while constant folding
+if (any(i /= k)) call abort()
+if (any(j /= m)) call abort()
+
+! check that reshape does the right thing at runtime
+n = reshape ((/1,2,3,4,5,6/), (/2,3/))
+if (any(n /= k)) call abort()
+o = reshape ((/1,2,3,4,5,6/), (/2,4/), (/0,0/), (/2,1/))
+if (any(o /= m)) call abort()
+end
+