diff options
author | Steven G. Kargl <kargl@gcc.gnu.org> | 2018-06-01 20:20:35 +0000 |
---|---|---|
committer | Steven G. Kargl <kargl@gcc.gnu.org> | 2018-06-01 20:20:35 +0000 |
commit | ca708a2b55206ff458545729d01f1a206a2af6c8 (patch) | |
tree | 1bbf4ec8615584055d4688c3ed48b9e4453c15a1 /gcc | |
parent | 64acc19ac4e11bd9df05f87b876bf12bea441b25 (diff) | |
download | gcc-ca708a2b55206ff458545729d01f1a206a2af6c8.zip gcc-ca708a2b55206ff458545729d01f1a206a2af6c8.tar.gz gcc-ca708a2b55206ff458545729d01f1a206a2af6c8.tar.bz2 |
re PR fortran/85816 (nested spread fails with "Integer overflow in xmallocarray")
2018-06-01 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/85816
PR fortran/85975
* libgfortran.h: Remove the GFC_DTYPE_COPY_SETRANK macro.
* intrinsics/reshape_generic.c: Directly assign rank.
* intrinsics/spread_generic.c: Ditto.
* m4/iforeach-s.m4: Ditto.
* m4/iforeach.m4: Ditto.
* m4/ifunction-s.m4: Ditto.
* m4/ifunction-s2.m4: Ditto.
* m4/ifunction.m4: Ditto.
* m4/ifunction_logical.m4: Ditto.
* m4/reshape.m4: Ditto.
* m4/spread.m4: Ditto.
* generated/all_l1.c: Regenerated from m4 files.
* generated/all_l16.c: Ditto.
* generated/all_l2.c: Ditto.
* generated/all_l4.c: Ditto.
* generated/all_l8.c: Ditto.
* generated/any_l1.c: Ditto.
* generated/any_l16.c: Ditto.
* generated/any_l2.c: Ditto.
* generated/any_l4.c: Ditto.
* generated/any_l8.c: Ditto.
* generated/count_16_l.c: Ditto.
* generated/count_1_l.c: Ditto.
* generated/count_2_l.c: Ditto.
* generated/count_4_l.c: Ditto.
* generated/count_8_l.c: Ditto.
* generated/iall_i1.c: Ditto.
* generated/iall_i16.c: Ditto.
* generated/iall_i2.c: Ditto.
* generated/iall_i4.c: Ditto.
* generated/iall_i8.c: Ditto.
* generated/iany_i1.c: Ditto.
* generated/iany_i16.c: Ditto.
* generated/iany_i2.c: Ditto.
* generated/iany_i4.c: Ditto.
* generated/iany_i8.c: Ditto.
* generated/iparity_i1.c: Ditto.
* generated/iparity_i16.c: Ditto.
* generated/iparity_i2.c: Ditto.
* generated/iparity_i4.c: Ditto.
* generated/iparity_i8.c: Ditto.
* generated/maxloc0_16_i1.c: Ditto.
* generated/maxloc0_16_i16.c: Ditto.
* generated/maxloc0_16_i2.c: Ditto.
* generated/maxloc0_16_i4.c: Ditto.
* generated/maxloc0_16_i8.c: Ditto.
* generated/maxloc0_16_r10.c: Ditto.
* generated/maxloc0_16_r16.c: Ditto.
* generated/maxloc0_16_r4.c: Ditto.
* generated/maxloc0_16_r8.c: Ditto.
* generated/maxloc0_16_s1.c: Ditto.
* generated/maxloc0_16_s4.c: Ditto.
* generated/maxloc0_4_i1.c: Ditto.
* generated/maxloc0_4_i16.c: Ditto.
* generated/maxloc0_4_i2.c: Ditto.
* generated/maxloc0_4_i4.c: Ditto.
* generated/maxloc0_4_i8.c: Ditto.
* generated/maxloc0_4_r10.c: Ditto.
* generated/maxloc0_4_r16.c: Ditto.
* generated/maxloc0_4_r4.c: Ditto.
* generated/maxloc0_4_r8.c: Ditto.
* generated/maxloc0_4_s1.c: Ditto.
* generated/maxloc0_4_s4.c: Ditto.
* generated/maxloc0_8_i1.c: Ditto.
* generated/maxloc0_8_i16.c: Ditto.
* generated/maxloc0_8_i2.c: Ditto.
* generated/maxloc0_8_i4.c: Ditto.
* generated/maxloc0_8_i8.c: Ditto.
* generated/maxloc0_8_r10.c: Ditto.
* generated/maxloc0_8_r16.c: Ditto.
* generated/maxloc0_8_r4.c: Ditto.
* generated/maxloc0_8_r8.c: Ditto.
* generated/maxloc0_8_s1.c: Ditto.
* generated/maxloc0_8_s4.c: Ditto.
* generated/maxloc1_16_i1.c: Ditto.
* generated/maxloc1_16_i16.c: Ditto.
* generated/maxloc1_16_i2.c: Ditto.
* generated/maxloc1_16_i4.c: Ditto.
* generated/maxloc1_16_i8.c: Ditto.
* generated/maxloc1_16_r10.c: Ditto.
* generated/maxloc1_16_r16.c: Ditto.
* generated/maxloc1_16_r4.c: Ditto.
* generated/maxloc1_16_r8.c: Ditto.
* generated/maxloc1_16_s1.c: Ditto.
* generated/maxloc1_16_s4.c: Ditto.
* generated/maxloc1_4_i1.c: Ditto.
* generated/maxloc1_4_i16.c: Ditto.
* generated/maxloc1_4_i2.c: Ditto.
* generated/maxloc1_4_i4.c: Ditto.
* generated/maxloc1_4_i8.c: Ditto.
* generated/maxloc1_4_r10.c: Ditto.
* generated/maxloc1_4_r16.c: Ditto.
* generated/maxloc1_4_r4.c: Ditto.
* generated/maxloc1_4_r8.c: Ditto.
* generated/maxloc1_4_s1.c: Ditto.
* generated/maxloc1_4_s4.c: Ditto.
* generated/maxloc1_8_i1.c: Ditto.
* generated/maxloc1_8_i16.c: Ditto.
* generated/maxloc1_8_i2.c: Ditto.
* generated/maxloc1_8_i4.c: Ditto.
* generated/maxloc1_8_i8.c: Ditto.
* generated/maxloc1_8_r10.c: Ditto.
* generated/maxloc1_8_r16.c: Ditto.
* generated/maxloc1_8_r4.c: Ditto.
* generated/maxloc1_8_r8.c: Ditto.
* generated/maxloc1_8_s1.c: Ditto.
* generated/maxloc1_8_s4.c: Ditto.
* generated/maxval1_s1.c: Ditto.
* generated/maxval1_s4.c: Ditto.
* generated/maxval_i1.c: Ditto.
* generated/maxval_i16.c: Ditto.
* generated/maxval_i2.c: Ditto.
* generated/maxval_i4.c: Ditto.
* generated/maxval_i8.c: Ditto.
* generated/maxval_r10.c: Ditto.
* generated/maxval_r16.c: Ditto.
* generated/maxval_r4.c: Ditto.
* generated/maxval_r8.c: Ditto.
* generated/minloc0_16_i1.c: Ditto.
* generated/minloc0_16_i16.c: Ditto.
* generated/minloc0_16_i2.c: Ditto.
* generated/minloc0_16_i4.c: Ditto.
* generated/minloc0_16_i8.c: Ditto.
* generated/minloc0_16_r10.c: Ditto.
* generated/minloc0_16_r16.c: Ditto.
* generated/minloc0_16_r4.c: Ditto.
* generated/minloc0_16_r8.c: Ditto.
* generated/minloc0_16_s1.c: Ditto.
* generated/minloc0_16_s4.c: Ditto.
* generated/minloc0_4_i1.c: Ditto.
* generated/minloc0_4_i16.c: Ditto.
* generated/minloc0_4_i2.c: Ditto.
* generated/minloc0_4_i4.c: Ditto.
* generated/minloc0_4_i8.c: Ditto.
* generated/minloc0_4_r10.c: Ditto.
* generated/minloc0_4_r16.c: Ditto.
* generated/minloc0_4_r4.c: Ditto.
* generated/minloc0_4_r8.c: Ditto.
* generated/minloc0_4_s1.c: Ditto.
* generated/minloc0_4_s4.c: Ditto.
* generated/minloc0_8_i1.c: Ditto.
* generated/minloc0_8_i16.c: Ditto.
* generated/minloc0_8_i2.c: Ditto.
* generated/minloc0_8_i4.c: Ditto.
* generated/minloc0_8_i8.c: Ditto.
* generated/minloc0_8_r10.c: Ditto.
* generated/minloc0_8_r16.c: Ditto.
* generated/minloc0_8_r4.c: Ditto.
* generated/minloc0_8_r8.c: Ditto.
* generated/minloc0_8_s1.c: Ditto.
* generated/minloc0_8_s4.c: Ditto.
* generated/minloc1_16_i1.c: Ditto.
* generated/minloc1_16_i16.c: Ditto.
* generated/minloc1_16_i2.c: Ditto.
* generated/minloc1_16_i4.c: Ditto.
* generated/minloc1_16_i8.c: Ditto.
* generated/minloc1_16_r10.c: Ditto.
* generated/minloc1_16_r16.c: Ditto.
* generated/minloc1_16_r4.c: Ditto.
* generated/minloc1_16_r8.c: Ditto.
* generated/minloc1_16_s1.c: Ditto.
* generated/minloc1_16_s4.c: Ditto.
* generated/minloc1_4_i1.c: Ditto.
* generated/minloc1_4_i16.c: Ditto.
* generated/minloc1_4_i2.c: Ditto.
* generated/minloc1_4_i4.c: Ditto.
* generated/minloc1_4_i8.c: Ditto.
* generated/minloc1_4_r10.c: Ditto.
* generated/minloc1_4_r16.c: Ditto.
* generated/minloc1_4_r4.c: Ditto.
* generated/minloc1_4_r8.c: Ditto.
* generated/minloc1_4_s1.c: Ditto.
* generated/minloc1_4_s4.c: Ditto.
* generated/minloc1_8_i1.c: Ditto.
* generated/minloc1_8_i16.c: Ditto.
* generated/minloc1_8_i2.c: Ditto.
* generated/minloc1_8_i4.c: Ditto.
* generated/minloc1_8_i8.c: Ditto.
* generated/minloc1_8_r10.c: Ditto.
* generated/minloc1_8_r16.c: Ditto.
* generated/minloc1_8_r4.c: Ditto.
* generated/minloc1_8_r8.c: Ditto.
* generated/minloc1_8_s1.c: Ditto.
* generated/minloc1_8_s4.c: Ditto.
* generated/minval1_s1.c: Ditto.
* generated/minval1_s4.c: Ditto.
* generated/minval_i1.c: Ditto.
* generated/minval_i16.c: Ditto.
* generated/minval_i2.c: Ditto.
* generated/minval_i4.c: Ditto.
* generated/minval_i8.c: Ditto.
* generated/minval_r10.c: Ditto.
* generated/minval_r16.c: Ditto.
* generated/minval_r4.c: Ditto.
* generated/minval_r8.c: Ditto.
* generated/norm2_r10.c: Ditto.
* generated/norm2_r16.c: Ditto.
* generated/norm2_r4.c: Ditto.
* generated/norm2_r8.c: Ditto.
* generated/parity_l1.c: Ditto.
* generated/parity_l16.c: Ditto.
* generated/parity_l2.c: Ditto.
* generated/parity_l4.c: Ditto.
* generated/parity_l8.c: Ditto.
* generated/product_c10.c: Ditto.
* generated/product_c16.c: Ditto.
* generated/product_c4.c: Ditto.
* generated/product_c8.c: Ditto.
* generated/product_i1.c: Ditto.
* generated/product_i16.c: Ditto.
* generated/product_i2.c: Ditto.
* generated/product_i4.c: Ditto.
* generated/product_i8.c: Ditto.
* generated/product_r10.c: Ditto.
* generated/product_r16.c: Ditto.
* generated/product_r4.c: Ditto.
* generated/product_r8.c: Ditto.
* generated/reshape_c10.c: Ditto.
* generated/reshape_c16.c: Ditto.
* generated/reshape_c4.c: Ditto.
* generated/reshape_c8.c: Ditto.
* generated/reshape_i16.c: Ditto.
* generated/reshape_i4.c: Ditto.
* generated/reshape_i8.c: Ditto.
* generated/reshape_r10.c: Ditto.
* generated/reshape_r16.c: Ditto.
* generated/reshape_r4.c: Ditto.
* generated/reshape_r8.c: Ditto.
* generated/spread_c10.c: Ditto.
* generated/spread_c16.c: Ditto.
* generated/spread_c4.c: Ditto.
* generated/spread_c8.c: Ditto.
* generated/spread_i1.c: Ditto.
* generated/spread_i16.c: Ditto.
* generated/spread_i2.c: Ditto.
* generated/spread_i4.c: Ditto.
* generated/spread_i8.c: Ditto.
* generated/spread_r10.c: Ditto.
* generated/spread_r16.c: Ditto.
* generated/spread_r4.c: Ditto.
* generated/spread_r8.c: Ditto.
* generated/sum_c10.c: Ditto.
* generated/sum_c16.c: Ditto.
* generated/sum_c4.c: Ditto.
* generated/sum_c8.c: Ditto.
* generated/sum_i1.c: Ditto.
* generated/sum_i16.c: Ditto.
* generated/sum_i2.c: Ditto.
* generated/sum_i4.c: Ditto.
* generated/sum_i8.c: Ditto.
* generated/sum_r10.c: Ditto.
* generated/sum_r16.c: Ditto.
* generated/sum_r4.c: Ditto.
* generated/sum_r8.c: Ditto.
2018-06-01 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/85816
PR fortran/85975
* gfortran.dg/pr85816.f90: New test.
* gfortran.dg/pr85975.f90: New test.
From-SVN: r261081
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr85816.f90 | 19 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr85975.f90 | 24 |
3 files changed, 50 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0ccd0ab..af5f62c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,4 +1,11 @@ 2018-06-01 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/85816 + PR fortran/85975 + * gfortran.dg/pr85816.f90: New test. + * gfortran.dg/pr85975.f90: New test. + +2018-06-01 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/63570 * gfortran.dg/random_init_1.f90: New test. diff --git a/gcc/testsuite/gfortran.dg/pr85816.f90 b/gcc/testsuite/gfortran.dg/pr85816.f90 new file mode 100644 index 0000000..e1fa97d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr85816.f90 @@ -0,0 +1,19 @@ +! { dg-do compile } +! PR fortran/85816 +! Original code from Martin Diehl <m.diehl at mpie dot de> +! +! Prior to fixing the problem with the array descriptor, gfortran died with +! Operating system error: Cannot allocate memory +! Integer overflow in xmallocarray +! +program test + implicit none + real(8) :: tensor(3,3) = 4 + integer :: grid(3) = 16 + ! ok + write(6,*) spread(spread(tensor,3,grid(1)),4,grid(1)) + ! ok (note the brackets) + write(6,*) spread((spread(spread(tensor,3,grid(1)),4,grid(2))),5,grid(3)) + ! not ok + write(6,*) spread(spread(spread(tensor,3,grid(1)),4,grid(2)),5,grid(3)) +end program diff --git a/gcc/testsuite/gfortran.dg/pr85975.f90 b/gcc/testsuite/gfortran.dg/pr85975.f90 new file mode 100644 index 0000000..9e526c2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr85975.f90 @@ -0,0 +1,24 @@ +! { dg-do run } +! PR fortran/85976 +! Original code from Stephan Kramer <stephan.kramer at imperial dot ac.uk> +program foo + + implicit none + + call bar(2, 3, 5, 7) + + contains + + subroutine bar(k, l, m, n) + + integer, intent(in) :: k, l, m, n + real :: a(k), b(k,l), c(k,l,m), d(k,l,m,n) + + if (size(spread(A, 1, 1)) /= k) stop 1 + if (size(spread(b, 1, 1)) /= k * l) stop 2 + if (size(spread(c, 1, 1)) /= k * l * m) stop 3 + if (size(spread(d, 1, 1)) /= k * l * m * n) stop 4 + + end subroutine + +end program |