diff options
author | Thomas Koenig <Thomas.Koenig@online.de> | 2005-04-09 21:38:47 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2005-04-09 21:38:47 +0000 |
commit | 50dd63a96201720c74d336aad9197a0efa019e4d (patch) | |
tree | 25814186d85901336c2e9c7e9a89298fa18cefc7 /gcc | |
parent | e5e625da47c6215bb0075bfdf7da3a7595d16a32 (diff) | |
download | gcc-50dd63a96201720c74d336aad9197a0efa019e4d.zip gcc-50dd63a96201720c74d336aad9197a0efa019e4d.tar.gz gcc-50dd63a96201720c74d336aad9197a0efa019e4d.tar.bz2 |
re PR libfortran/19106 ([4.0 only] segfault in executable for print *,sum(a,dim=2,mask=a>0))
2005-04-09 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/19106
PR libfortran/19014
* m4/ifunction.m4 (name`'rtype_qual`_'atype_code): ditto.
If retarray->data is NULL (i.e. the front end does not
know the rank and dimenson of the array), fill in its
properties and allocate memory.
Change the assertions about rank and dimension of retarray into
runtime errors and only check them for retarray->data != NULL.
Do the same for correcting the stride from 0 to 1 in retarray.
(`m'name`'rtype_qual`_'atype_code): Likewise.
* m4/iforeach.m4 (name`'rtype_qual`_'atype_code): Likewise.
Change assertion about rank of array to runtime error.
(`m'name`'rtype_qual`_'atype_code): Likewise.
* generated/all_l4.c: Regenerated.
* generated/all_l8.c: Regenerated.
* generated/any_l4.c: Regenerated.
* generated/any_l8.c: Regenerated.
* generated/count_4_l4.c: Regenerated.
* generated/count_4_l8.c: Regenerated.
* generated/count_8_l4.c: Regenerated.
* generated/count_8_l8.c: Regenerated.
* generated/maxloc0_4_i4.c: Regenerated.
* generated/maxloc0_4_i8.c: Regenerated.
* generated/maxloc0_4_r4.c: Regenerated.
* generated/maxloc0_4_r8.c: Regenerated.
* generated/maxloc0_8_i4.c: Regenerated.
* generated/maxloc0_8_i8.c: Regenerated.
* generated/maxloc0_8_r4.c: Regenerated.
* generated/maxloc0_8_r8.c: Regenerated.
* generated/maxloc1_4_i4.c: Regenerated.
* generated/maxloc1_4_i8.c: Regenerated.
* generated/maxloc1_4_r4.c: Regenerated.
* generated/maxloc1_4_r8.c: Regenerated.
* generated/maxloc1_8_i4.c: Regenerated.
* generated/maxloc1_8_i8.c: Regenerated.
* generated/maxloc1_8_r4.c: Regenerated.
* generated/maxloc1_8_r8.c: Regenerated.
* generated/maxval_i4.c: Regenerated.
* generated/maxval_i8.c: Regenerated.
* generated/maxval_r4.c: Regenerated.
* generated/maxval_r8.c: Regenerated.
* generated/minloc0_4_i4.c: Regenerated.
* generated/minloc0_4_i8.c: Regenerated.
* generated/minloc0_4_r4.c: Regenerated.
* generated/minloc0_4_r8.c: Regenerated.
* generated/minloc0_8_i4.c: Regenerated.
* generated/minloc0_8_i8.c: Regenerated.
* generated/minloc0_8_r4.c: Regenerated.
* generated/minloc0_8_r8.c: Regenerated.
* generated/minloc1_4_i4.c: Regenerated.
* generated/minloc1_4_i8.c: Regenerated.
* generated/minloc1_4_r4.c: Regenerated.
* generated/minloc1_4_r8.c: Regenerated.
* generated/minloc1_8_i4.c: Regenerated.
* generated/minloc1_8_i8.c: Regenerated.
* generated/minloc1_8_r4.c: Regenerated.
* generated/minloc1_8_r8.c: Regenerated.
* generated/minval_i4.c: Regenerated.
* generated/minval_i8.c: Regenerated.
* generated/minval_r4.c: Regenerated.
* generated/minval_r8.c: Regenerated.
* generated/product_c4.c: Regenerated.
* generated/product_c8.c: Regenerated.
* generated/product_i4.c: Regenerated.
* generated/product_i8.c: Regenerated.
* generated/product_r4.c: Regenerated.
* generated/product_r8.c: Regenerated.
* generated/sum_c4.c: Regenerated.
* generated/sum_c8.c: Regenerated.
* generated/sum_i4.c: Regenerated.
* generated/sum_i8.c: Regenerated.
* generated/sum_r4.c: Regenerated.
* generated/sum_r8.c: Regenerated.
2005-04-09 Thomas Koenig <Thomas.Koenig@online.de>
* gfortran.fortran-torture/execute/intrinsic_anyall.f90:
Added test for callee-allocated arrays with write statements.
* gfortran.fortran-torture/execute/intrinsic_count.f90: Likewise.
* gfortran.fortran-torture/execute/intrinsic_mmloc.f90: Likewise.
* gfortran.fortran-torture/execute/intrinsic_mmval.f90: Likewise.
* gfortran.fortran-torture/execute/intrinsic_product.f90: Likewise.
* gfortran.fortran-torture/execute/intrinsic_sum.f90: Likewise.
From-SVN: r97929
Diffstat (limited to 'gcc')
7 files changed, 127 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fe7b88e..1dfa145 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,15 @@ 2005-04-09 Thomas Koenig <Thomas.Koenig@online.de> + * gfortran.fortran-torture/execute/intrinsic_anyall.f90: + Added test for callee-allocated arrays with write statements. + * gfortran.fortran-torture/execute/intrinsic_count.f90: Likewise. + * gfortran.fortran-torture/execute/intrinsic_mmloc.f90: Likewise. + * gfortran.fortran-torture/execute/intrinsic_mmval.f90: Likewise. + * gfortran.fortran-torture/execute/intrinsic_product.f90: Likewise. + * gfortran.fortran-torture/execute/intrinsic_sum.f90: Likewise. + +2005-04-09 Thomas Koenig <Thomas.Koenig@online.de> + PR libfortran/20163 * gfortran.dg/open-options-blanks.f: New test. diff --git a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_anyall.f90 b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_anyall.f90 index d1b99da..4e392c5 100644 --- a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_anyall.f90 +++ b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_anyall.f90 @@ -3,6 +3,7 @@ program anyall implicit none logical, dimension(3, 3) :: a logical, dimension(3) :: b + character(len=10) line a = .false. if (any(a)) call abort @@ -13,6 +14,12 @@ program anyall if (.not. b(1)) call abort if (b(2)) call abort if (.not. b(3)) call abort + b = .false. + write (line, 9000) any(a,1) + read (line, 9000) b + if (.not. b(1)) call abort + if (b(2)) call abort + if (.not. b(3)) call abort a = .true. if (.not. all(a)) call abort @@ -23,4 +30,12 @@ program anyall if (b(1)) call abort if (.not. b(2)) call abort if (b(3)) call abort + b = .false. + write (line, 9000) all(a,1) + read (line, 9000) b + if (b(1)) call abort + if (.not. b(2)) call abort + if (b(3)) call abort + +9000 format (9L1) end program diff --git a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_count.f90 b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_count.f90 index a2de59f..f95c198 100644 --- a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_count.f90 +++ b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_count.f90 @@ -4,6 +4,7 @@ program intrinsic_count logical(kind=4), dimension (3, 5) :: a integer(kind=4), dimension (5) :: b integer i + character(len=10) line a = .false. if (count(a) .ne. 0) call abort @@ -13,9 +14,21 @@ program intrinsic_count a(2, 2) = .false. a(2, 5) = .false. if (count(a) .ne. 12) call abort + write (line, 9000) count(a) + read (line, 9000) i + if (i .ne. 12) call abort b(1:3) = count(a, 2); if (b(1) .ne. 4) call abort if (b(2) .ne. 3) call abort if (b(3) .ne. 5) call abort + b = 0 + write (line, 9000) count(a,2) + read (line, 9000) b + if (b(1) .ne. 4) call abort + if (b(2) .ne. 3) call abort + if (b(3) .ne. 5) call abort + +9000 format(3I3) + end program diff --git a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mmloc.f90 b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mmloc.f90 index f64242a..ea73913 100644 --- a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mmloc.f90 +++ b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mmloc.f90 @@ -5,6 +5,7 @@ program testmmloc integer, dimension (3) :: b logical, dimension (3, 3) :: m integer i + character(len=10) line a = reshape ((/1, 2, 3, 5, 4, 6, 9, 8, 7/), (/3, 3/)); @@ -12,6 +13,12 @@ program testmmloc if (b(1) .ne. 1) call abort if (b(2) .ne. 2) call abort if (b(3) .ne. 3) call abort + b = -1 + write (line, 9000) minloc(a,1) + read (line, 9000) b + if (b(1) .ne. 1) call abort + if (b(2) .ne. 2) call abort + if (b(3) .ne. 3) call abort m = .true. m(1, 1) = .false. @@ -20,19 +27,43 @@ program testmmloc if (b(1) .ne. 2) call abort if (b(2) .ne. 2) call abort if (b(3) .ne. 3) call abort + b = -1 + write (line, 9000) minloc(a, 1, m) + read (line, 9000) b + if (b(1) .ne. 2) call abort + if (b(2) .ne. 2) call abort + if (b(3) .ne. 3) call abort b(1:2) = minloc(a) if (b(1) .ne. 1) call abort if (b(2) .ne. 1) call abort + b = -1 + write (line, 9000) minloc(a) + read (line, 9000) b + if (b(1) .ne. 1) call abort + if (b(2) .ne. 1) call abort + if (b(3) .ne. 0) call abort b(1:2) = minloc(a, mask=m) if (b(1) .ne. 2) call abort if (b(2) .ne. 1) call abort + b = -1 + write (line, 9000) minloc(a, mask=m) + read (line, 9000) b + if (b(1) .ne. 2) call abort + if (b(2) .ne. 1) call abort + if (b(3) .ne. 0) call abort b = maxloc (a, 1) if (b(1) .ne. 3) call abort if (b(2) .ne. 3) call abort if (b(3) .ne. 1) call abort + b = -1 + write (line, 9000) maxloc(a, 1) + read (line, 9000) b + if (b(1) .ne. 3) call abort + if (b(2) .ne. 3) call abort + if (b(3) .ne. 1) call abort m = .true. m(1, 2) = .false. @@ -41,12 +72,31 @@ program testmmloc if (b(1) .ne. 3) call abort if (b(2) .ne. 3) call abort if (b(3) .ne. 2) call abort + b = -1 + write (line, 9000) maxloc(a, 1, m) + read (line, 9000) b + if (b(1) .ne. 3) call abort + if (b(2) .ne. 3) call abort + if (b(3) .ne. 2) call abort b(1:2) = maxloc(a) if (b(1) .ne. 1) call abort if (b(2) .ne. 3) call abort + b = -1 + write (line, 9000) maxloc(a) + read (line, 9000) b + if (b(1) .ne. 1) call abort + if (b(2) .ne. 3) call abort b(1:2) = maxloc(a, mask=m) if (b(1) .ne. 2) call abort if (b(2) .ne. 3) call abort + b = -1 + write (line, 9000) maxloc(a, mask=m) + read (line, 9000) b + if (b(1) .ne. 2) call abort + if (b(2) .ne. 3) call abort + if (b(3) .ne. 0) call abort + +9000 format (3I3) end program diff --git a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mmval.f90 b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mmval.f90 index 368c83b..86ec159 100644 --- a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mmval.f90 +++ b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mmval.f90 @@ -5,24 +5,35 @@ program testmmval integer, dimension (3) :: b logical, dimension (3, 3) :: m integer i + character (len=9) line a = reshape ((/1, 2, 3, 5, 4, 6, 9, 8, 7/), (/3, 3/)); b = minval (a, 1) if (any(b .ne. (/1, 4, 7/))) call abort + write (line, 9000) minval (a, 1) + if (line .ne. ' 1 4 7') call abort m = .true. m(1, 1) = .false. m(1, 2) = .false. b = minval (a, 1, m) if (any(b .ne. (/2, 4, 7/))) call abort + write (line, 9000) minval(a, 1, m) + if (line .ne. ' 2 4 7') call abort b = maxval (a, 1) if (any(b .ne. (/3, 6, 9/))) call abort + write (line, 9000) maxval (a, 1) + if (line .ne. ' 3 6 9') call abort m = .true. m(1, 2) = .false. m(1, 3) = .false. b = maxval (a, 1, m) if (any(b .ne. (/3, 6, 8/))) call abort + write (line, 9000) maxval(a, 1, m) + if (line .ne. ' 3 6 8') call abort + +9000 format(3I3) end program diff --git a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_product.f90 b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_product.f90 index 102832c..2892d54 100644 --- a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_product.f90 +++ b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_product.f90 @@ -4,6 +4,7 @@ program testproduct integer, dimension (3, 3) :: a integer, dimension (3) :: b logical, dimension (3, 3) :: m + character(len=12) line a = reshape ((/1, 2, 3, 4, 5, 6, 7, 8, 9/), (/3, 3/)); @@ -11,8 +12,14 @@ program testproduct if (any(b .ne. (/6, 120, 504/))) call abort + write (line, 9000) product(a,1) + if (line .ne. ' 6 120 504') call abort + if (product (a) .ne. 362880) call abort + write (line, 9010) product(a) + if (line .ne. '362880') call abort + m = .true. m(1, 1) = .false. m(2, 1) = .false. @@ -20,6 +27,14 @@ program testproduct if (any(b .ne. (/28, 40, 162/))) call abort + write (line, 9000) product(a, 2, m) + if (line .ne. ' 28 40 162') call abort + if (product (a, mask=m) .ne. 181440) call abort + write (line, 9010) product(a, mask=m) + if (line .ne. '181440') call abort + +9000 format (3I4) +9010 format (I6) end program diff --git a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_sum.f90 b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_sum.f90 index 43f832e..552f6c6 100644 --- a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_sum.f90 +++ b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_sum.f90 @@ -5,22 +5,35 @@ program testforall integer, dimension (3) :: b logical, dimension (3, 3) :: m integer i + character(len=9) line a = reshape ((/1, 2, 3, 4, 5, 6, 7, 8, 9/), (/3, 3/)); if (sum(a) .ne. 45) call abort + write (line, 9000) sum(a) + if (line .ne. ' 45 ') call abort b = sum (a, 1) if (b(1) .ne. 6) call abort if (b(2) .ne. 15) call abort if (b(3) .ne. 24) call abort + write (line, 9000) sum (a, 1) + if (line .ne. ' 6 15 24') call abort m = .true. m(1, 1) = .false. m(2, 1) = .false. if (sum (a, mask=m) .ne. 42) call abort + + write(line, 9000) sum (a, mask=m) + if (line .ne. ' 42 ') call abort + b = sum (a, 2, m) if (b(1) .ne. 11) call abort if (b(2) .ne. 13) call abort if (b(3) .ne. 18) call abort + write (line, 9000) sum (a, 2, m) + if (line .ne. ' 11 13 18') call abort + +9000 format(3I3) end program |