aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorThomas Koenig <Thomas.Koenig@online.de>2005-04-09 21:38:47 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2005-04-09 21:38:47 +0000
commit50dd63a96201720c74d336aad9197a0efa019e4d (patch)
tree25814186d85901336c2e9c7e9a89298fa18cefc7 /gcc
parente5e625da47c6215bb0075bfdf7da3a7595d16a32 (diff)
downloadgcc-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')
-rw-r--r--gcc/testsuite/ChangeLog10
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_anyall.f9015
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_count.f9013
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mmloc.f9050
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mmval.f9011
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_product.f9015
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_sum.f9013
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