aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2008-01-11 20:21:05 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2008-01-11 20:21:05 +0000
commitfd6590f8c8ca86225f6154636029937cd424dbec (patch)
treeae68d60081c905e627e5ae07599bc9c994f7a5fc /gcc
parent15af420d4e77e10803ccf00045a6105e9e55e96d (diff)
downloadgcc-fd6590f8c8ca86225f6154636029937cd424dbec.zip
gcc-fd6590f8c8ca86225f6154636029937cd424dbec.tar.gz
gcc-fd6590f8c8ca86225f6154636029937cd424dbec.tar.bz2
re PR libfortran/34670 (bounds checking for array intrinsics)
2008-01-11 Thomas Koenig <tkoenig@gcc.gnu.org> PR libfortran/34670 * m4/iparm.m4 (upcase): New macro (copied from the m4 manual). (u_name): New macro for the upper case name of the intrinsic. * m4/iforeach.m4 (name`'rtype_qual`_'atype_code): Add bounds checking and rank check, depending on compile_options.bounds_check. (`m'name`'rtype_qual`_'atype_code): Likewise. (`s'name`'rtype_qual`_'atype_code): Likewise. * m4/ifunction.m4 (name`'rtype_qual`_'atype_code): Add bounds checking and rank check, depending on compile_options.bounds_check. (`m'name`'rtype_qual`_'atype_code): Likewise. (`s'name`'rtype_qual`_'atype_code): Likewise. * generated/all_l16.c: Regenerated. * generated/all_l4.c: Regenerated. * generated/all_l8.c: Regenerated. * generated/any_l16.c: Regenerated. * generated/any_l4.c: Regenerated. * generated/any_l8.c: Regenerated. * generated/count_16_l16.c: Regenerated. * generated/count_16_l4.c: Regenerated. * generated/count_16_l8.c: Regenerated. * generated/count_4_l16.c: Regenerated. * generated/count_4_l4.c: Regenerated. * generated/count_4_l8.c: Regenerated. * generated/count_8_l16.c: Regenerated. * generated/count_8_l4.c: Regenerated. * generated/count_8_l8.c: Regenerated. * generated/maxloc0_16_i1.c: Regenerated. * generated/maxloc0_16_i16.c: Regenerated. * generated/maxloc0_16_i2.c: Regenerated. * generated/maxloc0_16_i4.c: Regenerated. * generated/maxloc0_16_i8.c: Regenerated. * generated/maxloc0_16_r10.c: Regenerated. * generated/maxloc0_16_r16.c: Regenerated. * generated/maxloc0_16_r4.c: Regenerated. * generated/maxloc0_16_r8.c: Regenerated. * generated/maxloc0_4_i1.c: Regenerated. * generated/maxloc0_4_i16.c: Regenerated. * generated/maxloc0_4_i2.c: Regenerated. * generated/maxloc0_4_i4.c: Regenerated. * generated/maxloc0_4_i8.c: Regenerated. * generated/maxloc0_4_r10.c: Regenerated. * generated/maxloc0_4_r16.c: Regenerated. * generated/maxloc0_4_r4.c: Regenerated. * generated/maxloc0_4_r8.c: Regenerated. * generated/maxloc0_8_i1.c: Regenerated. * generated/maxloc0_8_i16.c: Regenerated. * generated/maxloc0_8_i2.c: Regenerated. * generated/maxloc0_8_i4.c: Regenerated. * generated/maxloc0_8_i8.c: Regenerated. * generated/maxloc0_8_r10.c: Regenerated. * generated/maxloc0_8_r16.c: Regenerated. * generated/maxloc0_8_r4.c: Regenerated. * generated/maxloc0_8_r8.c: Regenerated. * generated/maxloc1_16_i1.c: Regenerated. * generated/maxloc1_16_i16.c: Regenerated. * generated/maxloc1_16_i2.c: Regenerated. * generated/maxloc1_16_i4.c: Regenerated. * generated/maxloc1_16_i8.c: Regenerated. * generated/maxloc1_16_r10.c: Regenerated. * generated/maxloc1_16_r16.c: Regenerated. * generated/maxloc1_16_r4.c: Regenerated. * generated/maxloc1_16_r8.c: Regenerated. * generated/maxloc1_4_i1.c: Regenerated. * generated/maxloc1_4_i16.c: Regenerated. * generated/maxloc1_4_i2.c: Regenerated. * generated/maxloc1_4_i4.c: Regenerated. * generated/maxloc1_4_i8.c: Regenerated. * generated/maxloc1_4_r10.c: Regenerated. * generated/maxloc1_4_r16.c: Regenerated. * generated/maxloc1_4_r4.c: Regenerated. * generated/maxloc1_4_r8.c: Regenerated. * generated/maxloc1_8_i1.c: Regenerated. * generated/maxloc1_8_i16.c: Regenerated. * generated/maxloc1_8_i2.c: Regenerated. * generated/maxloc1_8_i4.c: Regenerated. * generated/maxloc1_8_i8.c: Regenerated. * generated/maxloc1_8_r10.c: Regenerated. * generated/maxloc1_8_r16.c: Regenerated. * generated/maxloc1_8_r4.c: Regenerated. * generated/maxloc1_8_r8.c: Regenerated. * generated/maxval_i1.c: Regenerated. * generated/maxval_i16.c: Regenerated. * generated/maxval_i2.c: Regenerated. * generated/maxval_i4.c: Regenerated. * generated/maxval_i8.c: Regenerated. * generated/maxval_r10.c: Regenerated. * generated/maxval_r16.c: Regenerated. * generated/maxval_r4.c: Regenerated. * generated/maxval_r8.c: Regenerated. * generated/minloc0_16_i1.c: Regenerated. * generated/minloc0_16_i16.c: Regenerated. * generated/minloc0_16_i2.c: Regenerated. * generated/minloc0_16_i4.c: Regenerated. * generated/minloc0_16_i8.c: Regenerated. * generated/minloc0_16_r10.c: Regenerated. * generated/minloc0_16_r16.c: Regenerated. * generated/minloc0_16_r4.c: Regenerated. * generated/minloc0_16_r8.c: Regenerated. * generated/minloc0_4_i1.c: Regenerated. * generated/minloc0_4_i16.c: Regenerated. * generated/minloc0_4_i2.c: Regenerated. * generated/minloc0_4_i4.c: Regenerated. * generated/minloc0_4_i8.c: Regenerated. * generated/minloc0_4_r10.c: Regenerated. * generated/minloc0_4_r16.c: Regenerated. * generated/minloc0_4_r4.c: Regenerated. * generated/minloc0_4_r8.c: Regenerated. * generated/minloc0_8_i1.c: Regenerated. * generated/minloc0_8_i16.c: Regenerated. * generated/minloc0_8_i2.c: Regenerated. * generated/minloc0_8_i4.c: Regenerated. * generated/minloc0_8_i8.c: Regenerated. * generated/minloc0_8_r10.c: Regenerated. * generated/minloc0_8_r16.c: Regenerated. * generated/minloc0_8_r4.c: Regenerated. * generated/minloc0_8_r8.c: Regenerated. * generated/minloc1_16_i1.c: Regenerated. * generated/minloc1_16_i16.c: Regenerated. * generated/minloc1_16_i2.c: Regenerated. * generated/minloc1_16_i4.c: Regenerated. * generated/minloc1_16_i8.c: Regenerated. * generated/minloc1_16_r10.c: Regenerated. * generated/minloc1_16_r16.c: Regenerated. * generated/minloc1_16_r4.c: Regenerated. * generated/minloc1_16_r8.c: Regenerated. * generated/minloc1_4_i1.c: Regenerated. * generated/minloc1_4_i16.c: Regenerated. * generated/minloc1_4_i2.c: Regenerated. * generated/minloc1_4_i4.c: Regenerated. * generated/minloc1_4_i8.c: Regenerated. * generated/minloc1_4_r10.c: Regenerated. * generated/minloc1_4_r16.c: Regenerated. * generated/minloc1_4_r4.c: Regenerated. * generated/minloc1_4_r8.c: Regenerated. * generated/minloc1_8_i1.c: Regenerated. * generated/minloc1_8_i16.c: Regenerated. * generated/minloc1_8_i2.c: Regenerated. * generated/minloc1_8_i4.c: Regenerated. * generated/minloc1_8_i8.c: Regenerated. * generated/minloc1_8_r10.c: Regenerated. * generated/minloc1_8_r16.c: Regenerated. * generated/minloc1_8_r4.c: Regenerated. * generated/minloc1_8_r8.c: Regenerated. * generated/minval_i1.c: Regenerated. * generated/minval_i16.c: Regenerated. * generated/minval_i2.c: Regenerated. * generated/minval_i4.c: Regenerated. * generated/minval_i8.c: Regenerated. * generated/minval_r10.c: Regenerated. * generated/minval_r16.c: Regenerated. * generated/minval_r4.c: Regenerated. * generated/minval_r8.c: Regenerated. * generated/product_c10.c: Regenerated. * generated/product_c16.c: Regenerated. * generated/product_c4.c: Regenerated. * generated/product_c8.c: Regenerated. * generated/product_i1.c: Regenerated. * generated/product_i16.c: Regenerated. * generated/product_i2.c: Regenerated. * generated/product_i4.c: Regenerated. * generated/product_i8.c: Regenerated. * generated/product_r10.c: Regenerated. * generated/product_r16.c: Regenerated. * generated/product_r4.c: Regenerated. * generated/product_r8.c: Regenerated. * generated/sum_c10.c: Regenerated. * generated/sum_c16.c: Regenerated. * generated/sum_c4.c: Regenerated. * generated/sum_c8.c: Regenerated. * generated/sum_i1.c: Regenerated. * generated/sum_i16.c: Regenerated. * generated/sum_i2.c: Regenerated. * generated/sum_i4.c: Regenerated. * generated/sum_i8.c: Regenerated. * generated/sum_r10.c: Regenerated. * generated/sum_r16.c: Regenerated. * generated/sum_r4.c: Regenerated. * generated/sum_r8.c: Regenerated. 2008-01-11 Thomas Koenig <tkoenig@gcc.gnu.org> PR libfortran/34670 * all_bounds_1.f90: New test case. * maxloc_bounds_1.f90: New test case. * maxloc_bounds_2.f90: New test case. * maxloc_bounds_3.f90: New test case. * maxloc_bounds_4.f90: New test case. * maxloc_bounds_5.f90: New test case. * maxloc_bounds_6.f90: New test case. * maxloc_bounds_7.f90: New test case. * maxloc_bounds_8.f90: New test case. From-SVN: r131473
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog13
-rw-r--r--gcc/testsuite/gfortran.dg/all_bounds_1.f9017
-rw-r--r--gcc/testsuite/gfortran.dg/maxloc_bounds_1.f9014
-rw-r--r--gcc/testsuite/gfortran.dg/maxloc_bounds_2.f9016
-rw-r--r--gcc/testsuite/gfortran.dg/maxloc_bounds_3.f9016
-rw-r--r--gcc/testsuite/gfortran.dg/maxloc_bounds_4.f9023
-rw-r--r--gcc/testsuite/gfortran.dg/maxloc_bounds_5.f9022
-rw-r--r--gcc/testsuite/gfortran.dg/maxloc_bounds_6.f9016
-rw-r--r--gcc/testsuite/gfortran.dg/maxloc_bounds_7.f9022
-rw-r--r--gcc/testsuite/gfortran.dg/maxloc_bounds_8.f9016
10 files changed, 175 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index fd20866..85060ac 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,16 @@
+2008-01-11 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR libfortran/34670
+ * all_bounds_1.f90: New test case.
+ * maxloc_bounds_1.f90: New test case.
+ * maxloc_bounds_2.f90: New test case.
+ * maxloc_bounds_3.f90: New test case.
+ * maxloc_bounds_4.f90: New test case.
+ * maxloc_bounds_5.f90: New test case.
+ * maxloc_bounds_6.f90: New test case.
+ * maxloc_bounds_7.f90: New test case.
+ * maxloc_bounds_8.f90: New test case.
+
2008-01-11 Eric Botcazou <ebotcazou@adacore.com>
* gcc.dg/struct-ret-3.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/all_bounds_1.f90 b/gcc/testsuite/gfortran.dg/all_bounds_1.f90
new file mode 100644
index 0000000..d8cb07b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/all_bounds_1.f90
@@ -0,0 +1,17 @@
+! { dg-do run }
+! { dg-options "-fbounds-check" }
+! { dg-shouldfail "Incorrect extent in return value of ALL intrinsic" }
+program main
+ logical(kind=4), allocatable :: f(:,:)
+ logical(kind=4) :: res(3)
+ character(len=80) line
+ allocate (f(2,2))
+ f = .false.
+ f(1,1) = .true.
+ f(2,1) = .true.
+ res = all(f,dim=1)
+ write(line,fmt='(80L1)') res
+end program main
+! { dg-output "Fortran runtime error: Incorrect extent in return value of ALL intrinsic in dimension 1: is 3, should be 2" }
+
+
diff --git a/gcc/testsuite/gfortran.dg/maxloc_bounds_1.f90 b/gcc/testsuite/gfortran.dg/maxloc_bounds_1.f90
new file mode 100644
index 0000000..a107db2
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/maxloc_bounds_1.f90
@@ -0,0 +1,14 @@
+! { dg-do run }
+! { dg-options "-fbounds-check" }
+! { dg-shouldfail "Incorrect extent in return value of MAXLOC intrinsic in dimension 1: is 3, should be 2" }
+program main
+ integer(kind=4), allocatable :: f(:,:)
+ integer(kind=4) :: res(3)
+ character(len=80) line
+ allocate (f(2,2))
+ f = 3
+ res = maxloc(f,dim=1)
+ write(line,fmt='(80I1)') res
+end program main
+! { dg-output "Fortran runtime error: Incorrect extent in return value of MAXLOC intrinsic in dimension 1: is 3, should be 2" }
+
diff --git a/gcc/testsuite/gfortran.dg/maxloc_bounds_2.f90 b/gcc/testsuite/gfortran.dg/maxloc_bounds_2.f90
new file mode 100644
index 0000000..39af3cb
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/maxloc_bounds_2.f90
@@ -0,0 +1,16 @@
+! { dg-do run }
+! { dg-options "-fbounds-check" }
+! { dg-shouldfail "Incorrect extent in return value of MAXLOC intrinsic in dimension 1: is 3, should be 2" }
+program main
+ integer(kind=4), allocatable :: f(:,:)
+ logical, allocatable :: m(:,:)
+ integer(kind=4) :: res(3)
+ character(len=80) line
+ allocate (f(2,2),m(2,2))
+ f = 3
+ m = .true.
+ res = maxloc(f,dim=1,mask=m)
+ write(line,fmt='(80I1)') res
+end program main
+! { dg-output "Fortran runtime error: Incorrect extent in return value of MAXLOC intrinsic in dimension 1: is 3, should be 2" }
+
diff --git a/gcc/testsuite/gfortran.dg/maxloc_bounds_3.f90 b/gcc/testsuite/gfortran.dg/maxloc_bounds_3.f90
new file mode 100644
index 0000000..41df6a8
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/maxloc_bounds_3.f90
@@ -0,0 +1,16 @@
+! { dg-do run }
+! { dg-options "-fbounds-check" }
+! { dg-shouldfail "Incorrect extent in MASK argument of MAXLOC intrinsic in dimension 2: is 3, should be 2" }
+program main
+ integer(kind=4), allocatable :: f(:,:)
+ logical, allocatable :: m(:,:)
+ integer(kind=4) :: res(2)
+ character(len=80) line
+ allocate (f(2,2),m(2,3))
+ f = 3
+ m = .true.
+ res = maxloc(f,dim=1,mask=m)
+ write(line,fmt='(80I1)') res
+end program main
+! { dg-output "Fortran runtime error: Incorrect extent in MASK argument of MAXLOC intrinsic in dimension 2: is 3, should be 2" }
+
diff --git a/gcc/testsuite/gfortran.dg/maxloc_bounds_4.f90 b/gcc/testsuite/gfortran.dg/maxloc_bounds_4.f90
new file mode 100644
index 0000000..22e5bf0
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/maxloc_bounds_4.f90
@@ -0,0 +1,23 @@
+! { dg-do run }
+! { dg-options "-fbounds-check" }
+! { dg-shouldfail "Incorrect extent in return value of MAXLOC intrnisic: is 3, should be 2" }
+module tst
+contains
+ subroutine foo(res)
+ integer(kind=4), allocatable :: f(:,:)
+ integer, dimension(:) :: res
+ allocate (f(2,5))
+ f = 3
+ res = maxloc(f)
+ end subroutine foo
+
+end module tst
+program main
+ use tst
+ implicit none
+ integer(kind=4) :: res(3)
+ call foo(res)
+end program main
+! { dg-output "Fortran runtime error: Incorrect extent in return value of MAXLOC intrnisic: is 3, should be 2" }
+! { dg-final { cleanup-modules "tst" } }
+
diff --git a/gcc/testsuite/gfortran.dg/maxloc_bounds_5.f90 b/gcc/testsuite/gfortran.dg/maxloc_bounds_5.f90
new file mode 100644
index 0000000..cbc0292
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/maxloc_bounds_5.f90
@@ -0,0 +1,22 @@
+! { dg-do run }
+! { dg-options "-fbounds-check" }
+! { dg-shouldfail "Incorrect extent in return value of MAXLOC intrnisic: is 3, should be 2" }
+module tst
+contains
+ subroutine foo(res)
+ integer(kind=4), allocatable :: f(:,:)
+ integer, dimension(:) :: res
+ allocate (f(2,5))
+ f = 3
+ res = maxloc(f,mask=f>2)
+ end subroutine foo
+
+end module tst
+program main
+ use tst
+ implicit none
+ integer(kind=4) :: res(3)
+ call foo(res)
+end program main
+! { dg-output "Fortran runtime error: Incorrect extent in return value of MAXLOC intrnisic: is 3, should be 2" }
+! { dg-final { cleanup-modules "tst" } }
diff --git a/gcc/testsuite/gfortran.dg/maxloc_bounds_6.f90 b/gcc/testsuite/gfortran.dg/maxloc_bounds_6.f90
new file mode 100644
index 0000000..74a78ff
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/maxloc_bounds_6.f90
@@ -0,0 +1,16 @@
+! { dg-do run }
+! { dg-options "-fbounds-check" }
+! { dg-shouldfail "Incorrect extent in MASK argument of MAXLOC intrinsic in dimension 2: is 3, should be 2" }
+program main
+ integer(kind=4), allocatable :: f(:,:)
+ logical, allocatable :: m(:,:)
+ integer(kind=4) :: res(2)
+ character(len=80) line
+ allocate (f(2,2),m(2,3))
+ f = 3
+ m = .true.
+ res = maxloc(f,mask=m)
+ write(line,fmt='(80I1)') res
+end program main
+! { dg-output "Fortran runtime error: Incorrect extent in MASK argument of MAXLOC intrinsic in dimension 2: is 3, should be 2" }
+! { dg-final { cleanup-modules "tst" } }
diff --git a/gcc/testsuite/gfortran.dg/maxloc_bounds_7.f90 b/gcc/testsuite/gfortran.dg/maxloc_bounds_7.f90
new file mode 100644
index 0000000..491a044
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/maxloc_bounds_7.f90
@@ -0,0 +1,22 @@
+! { dg-do run }
+! { dg-options "-fbounds-check" }
+! { dg-shouldfail "Incorrect extent in return value of MAXLOC intrnisic: is 3, should be 2" }
+module tst
+contains
+ subroutine foo(res)
+ integer(kind=4), allocatable :: f(:,:)
+ integer, dimension(:) :: res
+ allocate (f(2,5))
+ f = 3
+ res = maxloc(f,mask=.true.)
+ end subroutine foo
+
+end module tst
+program main
+ use tst
+ implicit none
+ integer(kind=4) :: res(3)
+ call foo(res)
+end program main
+! { dg-output "Fortran runtime error: Incorrect extent in return value of MAXLOC intrnisic: is 3, should be 2" }
+! { dg-final { cleanup-modules "tst" } }
diff --git a/gcc/testsuite/gfortran.dg/maxloc_bounds_8.f90 b/gcc/testsuite/gfortran.dg/maxloc_bounds_8.f90
new file mode 100644
index 0000000..4ec1137
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/maxloc_bounds_8.f90
@@ -0,0 +1,16 @@
+! { dg-do run }
+! { dg-options "-fbounds-check" }
+! { dg-shouldfail "Incorrect extent in return value of MAXLOC intrinsic in dimension 1: is 3, should be 2" }
+program main
+ integer(kind=4), allocatable :: f(:,:)
+ logical, allocatable :: m(:,:)
+ integer(kind=4) :: res(3)
+ character(len=80) line
+ allocate (f(2,2),m(2,2))
+ f = 3
+ m = .true.
+ res = maxloc(f,dim=1,mask=.true.)
+ write(line,fmt='(80I1)') res
+end program main
+! { dg-output "Fortran runtime error: Incorrect extent in return value of MAXLOC intrinsic in dimension 1: is 3, should be 2" }
+