diff options
author | Mikael Morin <mikael@gcc.gnu.org> | 2011-11-25 20:18:21 +0000 |
---|---|---|
committer | Mikael Morin <mikael@gcc.gnu.org> | 2011-11-25 20:18:21 +0000 |
commit | f6a40ccda3f1177b1fed2c79f798b50bcf298d98 (patch) | |
tree | 56b1c81ce6bff0117fad9c0e617304d4814f6478 /gcc | |
parent | 9e08718a4ae1f5cafc67e890c5e1638454ec395f (diff) | |
download | gcc-f6a40ccda3f1177b1fed2c79f798b50bcf298d98.zip gcc-f6a40ccda3f1177b1fed2c79f798b50bcf298d98.tar.gz gcc-f6a40ccda3f1177b1fed2c79f798b50bcf298d98.tar.bz2 |
re PR fortran/51250 (Bug with SUM(,dim,mask))
fortran/
PR fortran/51250
PR fortran/43829
* trans-array.c (gfc_trans_create_temp_array): Get dimension from
the right gfc_ss struct.
testsuite/
PR fortran/51250
PR fortran/43829
* gfortran.dg/inline_sum_3.f90: New test.
From-SVN: r181730
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/trans-array.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/inline_sum_3.f90 | 31 |
4 files changed, 45 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index f0faca4..d669f5a 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2011-11-25 Mikael Morin <mikael@gcc.gnu.org> + + PR fortran/51250 + PR fortran/43829 + * trans-array.c (gfc_trans_create_temp_array): Get dimension from + the right gfc_ss struct. + 2011-11-25 Tobias Burnus <burnus@net-b.de> PR fortran/50408 diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 2fb2d34..943503a 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -1087,7 +1087,7 @@ gfc_trans_create_temp_array (stmtblock_t * pre, stmtblock_t * post, gfc_ss * ss, for (s = ss; s; s = s->parent) for (n = 0; n < s->loop->dimen; n++) { - dim = get_scalarizer_dim_for_array_dim (ss, ss->dim[n]); + dim = get_scalarizer_dim_for_array_dim (ss, s->dim[n]); /* For a callee allocated array express the loop bounds in terms of the descriptor fields. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 68c78f7..eafeb9e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2011-11-25 Mikael Morin <mikael@gcc.gnu.org> + + PR fortran/51250 + PR fortran/43829 + * gfortran.dg/inline_sum_3.f90: New test. + 2011-11-25 Uros Bizjak <ubizjak@gmail.com> PR testsuite/51258 diff --git a/gcc/testsuite/gfortran.dg/inline_sum_3.f90 b/gcc/testsuite/gfortran.dg/inline_sum_3.f90 new file mode 100644 index 0000000..6858228 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/inline_sum_3.f90 @@ -0,0 +1,31 @@ +! { dg-do run } +! +! PR fortran/51250 +! Wrong loop shape for SUM when arguments are library-allocated arrays. +! +! Original testcase provided by Harald Anlauf <anlauf@gmx.de> + +program gfcbug115 + implicit none + integer :: n_obstype = 2 + integer :: nboxes = 1 + integer :: nprocs = 1 + integer :: nbox, j + integer, allocatable :: nbx(:,:), pes(:) + + allocate (pes(nboxes)) + allocate (nbx(n_obstype,nboxes)) + nbx(:,:) = 1 + do j = 1, nboxes + pes(j) = modulo (j-1, nprocs) + end do + if (any(nbx /= 1)) call abort + do j = 0, nprocs-1 + if (.not. all(spread (pes==j,dim=1,ncopies=n_obstype))) call abort + ! The two following tests used to fail + if (any(shape(sum(nbx,dim=2,mask=spread (pes==j,dim=1,ncopies=n_obstype))) & + /= (/ 2 /))) call abort + if (any(sum (nbx,dim=2,mask=spread (pes==j,dim=1,ncopies=n_obstype)) & + /= (/ 1, 1 /))) call abort + end do +end program gfcbug115 |