]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR libfortran/34670 (bounds checking for array intrinsics)
authorThomas Koenig <tkoenig@gcc.gnu.org>
Fri, 11 Jan 2008 20:21:05 +0000 (20:21 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Fri, 11 Jan 2008 20:21:05 +0000 (20:21 +0000)
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

181 files changed:
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/all_bounds_1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/maxloc_bounds_1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/maxloc_bounds_2.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/maxloc_bounds_3.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/maxloc_bounds_4.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/maxloc_bounds_5.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/maxloc_bounds_6.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/maxloc_bounds_7.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/maxloc_bounds_8.f90 [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/generated/all_l16.c
libgfortran/generated/all_l4.c
libgfortran/generated/all_l8.c
libgfortran/generated/any_l16.c
libgfortran/generated/any_l4.c
libgfortran/generated/any_l8.c
libgfortran/generated/count_16_l16.c
libgfortran/generated/count_16_l4.c
libgfortran/generated/count_16_l8.c
libgfortran/generated/count_4_l16.c
libgfortran/generated/count_4_l4.c
libgfortran/generated/count_4_l8.c
libgfortran/generated/count_8_l16.c
libgfortran/generated/count_8_l4.c
libgfortran/generated/count_8_l8.c
libgfortran/generated/maxloc0_16_i1.c
libgfortran/generated/maxloc0_16_i16.c
libgfortran/generated/maxloc0_16_i2.c
libgfortran/generated/maxloc0_16_i4.c
libgfortran/generated/maxloc0_16_i8.c
libgfortran/generated/maxloc0_16_r10.c
libgfortran/generated/maxloc0_16_r16.c
libgfortran/generated/maxloc0_16_r4.c
libgfortran/generated/maxloc0_16_r8.c
libgfortran/generated/maxloc0_4_i1.c
libgfortran/generated/maxloc0_4_i16.c
libgfortran/generated/maxloc0_4_i2.c
libgfortran/generated/maxloc0_4_i4.c
libgfortran/generated/maxloc0_4_i8.c
libgfortran/generated/maxloc0_4_r10.c
libgfortran/generated/maxloc0_4_r16.c
libgfortran/generated/maxloc0_4_r4.c
libgfortran/generated/maxloc0_4_r8.c
libgfortran/generated/maxloc0_8_i1.c
libgfortran/generated/maxloc0_8_i16.c
libgfortran/generated/maxloc0_8_i2.c
libgfortran/generated/maxloc0_8_i4.c
libgfortran/generated/maxloc0_8_i8.c
libgfortran/generated/maxloc0_8_r10.c
libgfortran/generated/maxloc0_8_r16.c
libgfortran/generated/maxloc0_8_r4.c
libgfortran/generated/maxloc0_8_r8.c
libgfortran/generated/maxloc1_16_i1.c
libgfortran/generated/maxloc1_16_i16.c
libgfortran/generated/maxloc1_16_i2.c
libgfortran/generated/maxloc1_16_i4.c
libgfortran/generated/maxloc1_16_i8.c
libgfortran/generated/maxloc1_16_r10.c
libgfortran/generated/maxloc1_16_r16.c
libgfortran/generated/maxloc1_16_r4.c
libgfortran/generated/maxloc1_16_r8.c
libgfortran/generated/maxloc1_4_i1.c
libgfortran/generated/maxloc1_4_i16.c
libgfortran/generated/maxloc1_4_i2.c
libgfortran/generated/maxloc1_4_i4.c
libgfortran/generated/maxloc1_4_i8.c
libgfortran/generated/maxloc1_4_r10.c
libgfortran/generated/maxloc1_4_r16.c
libgfortran/generated/maxloc1_4_r4.c
libgfortran/generated/maxloc1_4_r8.c
libgfortran/generated/maxloc1_8_i1.c
libgfortran/generated/maxloc1_8_i16.c
libgfortran/generated/maxloc1_8_i2.c
libgfortran/generated/maxloc1_8_i4.c
libgfortran/generated/maxloc1_8_i8.c
libgfortran/generated/maxloc1_8_r10.c
libgfortran/generated/maxloc1_8_r16.c
libgfortran/generated/maxloc1_8_r4.c
libgfortran/generated/maxloc1_8_r8.c
libgfortran/generated/maxval_i1.c
libgfortran/generated/maxval_i16.c
libgfortran/generated/maxval_i2.c
libgfortran/generated/maxval_i4.c
libgfortran/generated/maxval_i8.c
libgfortran/generated/maxval_r10.c
libgfortran/generated/maxval_r16.c
libgfortran/generated/maxval_r4.c
libgfortran/generated/maxval_r8.c
libgfortran/generated/minloc0_16_i1.c
libgfortran/generated/minloc0_16_i16.c
libgfortran/generated/minloc0_16_i2.c
libgfortran/generated/minloc0_16_i4.c
libgfortran/generated/minloc0_16_i8.c
libgfortran/generated/minloc0_16_r10.c
libgfortran/generated/minloc0_16_r16.c
libgfortran/generated/minloc0_16_r4.c
libgfortran/generated/minloc0_16_r8.c
libgfortran/generated/minloc0_4_i1.c
libgfortran/generated/minloc0_4_i16.c
libgfortran/generated/minloc0_4_i2.c
libgfortran/generated/minloc0_4_i4.c
libgfortran/generated/minloc0_4_i8.c
libgfortran/generated/minloc0_4_r10.c
libgfortran/generated/minloc0_4_r16.c
libgfortran/generated/minloc0_4_r4.c
libgfortran/generated/minloc0_4_r8.c
libgfortran/generated/minloc0_8_i1.c
libgfortran/generated/minloc0_8_i16.c
libgfortran/generated/minloc0_8_i2.c
libgfortran/generated/minloc0_8_i4.c
libgfortran/generated/minloc0_8_i8.c
libgfortran/generated/minloc0_8_r10.c
libgfortran/generated/minloc0_8_r16.c
libgfortran/generated/minloc0_8_r4.c
libgfortran/generated/minloc0_8_r8.c
libgfortran/generated/minloc1_16_i1.c
libgfortran/generated/minloc1_16_i16.c
libgfortran/generated/minloc1_16_i2.c
libgfortran/generated/minloc1_16_i4.c
libgfortran/generated/minloc1_16_i8.c
libgfortran/generated/minloc1_16_r10.c
libgfortran/generated/minloc1_16_r16.c
libgfortran/generated/minloc1_16_r4.c
libgfortran/generated/minloc1_16_r8.c
libgfortran/generated/minloc1_4_i1.c
libgfortran/generated/minloc1_4_i16.c
libgfortran/generated/minloc1_4_i2.c
libgfortran/generated/minloc1_4_i4.c
libgfortran/generated/minloc1_4_i8.c
libgfortran/generated/minloc1_4_r10.c
libgfortran/generated/minloc1_4_r16.c
libgfortran/generated/minloc1_4_r4.c
libgfortran/generated/minloc1_4_r8.c
libgfortran/generated/minloc1_8_i1.c
libgfortran/generated/minloc1_8_i16.c
libgfortran/generated/minloc1_8_i2.c
libgfortran/generated/minloc1_8_i4.c
libgfortran/generated/minloc1_8_i8.c
libgfortran/generated/minloc1_8_r10.c
libgfortran/generated/minloc1_8_r16.c
libgfortran/generated/minloc1_8_r4.c
libgfortran/generated/minloc1_8_r8.c
libgfortran/generated/minval_i1.c
libgfortran/generated/minval_i16.c
libgfortran/generated/minval_i2.c
libgfortran/generated/minval_i4.c
libgfortran/generated/minval_i8.c
libgfortran/generated/minval_r10.c
libgfortran/generated/minval_r16.c
libgfortran/generated/minval_r4.c
libgfortran/generated/minval_r8.c
libgfortran/generated/product_c10.c
libgfortran/generated/product_c16.c
libgfortran/generated/product_c4.c
libgfortran/generated/product_c8.c
libgfortran/generated/product_i1.c
libgfortran/generated/product_i16.c
libgfortran/generated/product_i2.c
libgfortran/generated/product_i4.c
libgfortran/generated/product_i8.c
libgfortran/generated/product_r10.c
libgfortran/generated/product_r16.c
libgfortran/generated/product_r4.c
libgfortran/generated/product_r8.c
libgfortran/generated/sum_c10.c
libgfortran/generated/sum_c16.c
libgfortran/generated/sum_c4.c
libgfortran/generated/sum_c8.c
libgfortran/generated/sum_i1.c
libgfortran/generated/sum_i16.c
libgfortran/generated/sum_i2.c
libgfortran/generated/sum_i4.c
libgfortran/generated/sum_i8.c
libgfortran/generated/sum_r10.c
libgfortran/generated/sum_r16.c
libgfortran/generated/sum_r4.c
libgfortran/generated/sum_r8.c
libgfortran/m4/iforeach.m4
libgfortran/m4/ifunction.m4
libgfortran/m4/iparm.m4

index fd208664ef5256aebf98c2f26e6b30477f0dd16c..85060acfa8b58ccb68ee8e1f5983d39099ddb5d4 100644 (file)
@@ -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 (file)
index 0000000..d8cb07b
--- /dev/null
@@ -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 (file)
index 0000000..a107db2
--- /dev/null
@@ -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 (file)
index 0000000..39af3cb
--- /dev/null
@@ -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 (file)
index 0000000..41df6a8
--- /dev/null
@@ -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 (file)
index 0000000..22e5bf0
--- /dev/null
@@ -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 (file)
index 0000000..cbc0292
--- /dev/null
@@ -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 (file)
index 0000000..74a78ff
--- /dev/null
@@ -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 (file)
index 0000000..491a044
--- /dev/null
@@ -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 (file)
index 0000000..4ec1137
--- /dev/null
@@ -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" }
+
index 2d276f63a2c7e61b23d12cf13ef68c9cfd83d8bb..34b730795e1590d1d4e0ebb8eb146833a023cbbd 100644 (file)
@@ -1,3 +1,186 @@
+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-05  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libfortran/34676
index 1179f9cf9719c4452a54f7d88b9480fb65b45d67..2cc81ce423a09d59c02d212fd333c9806af455ae 100644 (file)
@@ -115,7 +115,25 @@ all_l16 (gfc_array_l16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " ALL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " ALL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
index 11b9b9fe8aca7dea768eb92011dfb166321c5e7d..12f9efb2b915a81ee92c268b1c4ec10fa73e28d7 100644 (file)
@@ -115,7 +115,25 @@ all_l4 (gfc_array_l4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " ALL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " ALL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
index 93d00c274bb7402aa2e7f668623f6faee640302e..c9fa80935ae82a93d70221e755ded43776da1337 100644 (file)
@@ -115,7 +115,25 @@ all_l8 (gfc_array_l8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " ALL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " ALL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
index 1ca5584b25db3166181872d44b4743ba55944883..1ba59edbadd12d283f7e0b830e4b73f702ef603c 100644 (file)
@@ -115,7 +115,25 @@ any_l16 (gfc_array_l16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " ANY intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " ANY intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
index b17d27310431203adeee8a4454ddccd5401ea61d..83116ebe9cac58c4a59daa079d2a7713e7d51b97 100644 (file)
@@ -115,7 +115,25 @@ any_l4 (gfc_array_l4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " ANY intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " ANY intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
index 6c50befa85e47c5aa836f8a85f7b7bd934ce7b1b..a85e6e89ca0dbdf5dcf91bc181f7b051c16dcd6d 100644 (file)
@@ -115,7 +115,25 @@ any_l8 (gfc_array_l8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " ANY intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " ANY intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
index cc9b4702e82fb1008a75608c73e56ca3cff90ab2..351eb8a1e6562dea98fb4f4661762c74ef7d74a8 100644 (file)
@@ -115,7 +115,25 @@ count_16_l16 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " COUNT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " COUNT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
index 72d61aeabc2ff9657bffe300787f625ac15306a4..9f849d8b725609851144fa2a0127551efc032d6e 100644 (file)
@@ -115,7 +115,25 @@ count_16_l4 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " COUNT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " COUNT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
index 9275f7e2265834f9cf82fffdd165c74f33473e1c..90659da0a1775a2f8696e1a98a25fd9a264132f5 100644 (file)
@@ -115,7 +115,25 @@ count_16_l8 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " COUNT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " COUNT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
index d111855c942e6bd35abda4a62245472814003d31..c3b3daad85a518481f317b249af8f06a2892bf6c 100644 (file)
@@ -115,7 +115,25 @@ count_4_l16 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " COUNT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " COUNT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
index de1f386d82c4e3371b9b957934e7987d2b2dc517..3bfcf179c75a345a4b46cb2937032391ca8caf01 100644 (file)
@@ -115,7 +115,25 @@ count_4_l4 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " COUNT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " COUNT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
index e3a80a409c5660007a5d7995dee55bfaf63d6a3c..7debda799bbd9ce68212427170a64663fe65d6e5 100644 (file)
@@ -115,7 +115,25 @@ count_4_l8 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " COUNT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " COUNT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
index 9f3d2458e8e70cc0f65781706a57db5fae66ced5..815b79ab65cbf901ddad23347022424093de9bda 100644 (file)
@@ -115,7 +115,25 @@ count_8_l16 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " COUNT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " COUNT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
index adbf30932ac3265b17897d296d0e370a0f472571..84401ded1e15c3a407a8e037a6caeb74d5921436 100644 (file)
@@ -115,7 +115,25 @@ count_8_l4 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " COUNT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " COUNT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
index 927c7ae8bd51fa554cc6668f3d0381f162ad8759..fd26280a550c1e5893c992da6c8fb7d96f7bdf70 100644 (file)
@@ -115,7 +115,25 @@ count_8_l8 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " COUNT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " COUNT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
index dd05af10a84b011d5766996ab1f06ba5f7d19b76..3cd6554a3460f96664558124127362ff09162501 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_16_i1 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_16_i1 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_16_i1 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 2a68c549694c3b362f6f70dc290d60c0740ba47e..9bfec04301311e808f9b2303a09f7edf83db62e2 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_16_i16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_16_i16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_16_i16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 093170ac8c466a0b8adb349717a0f804266d9f0f..b57e78f927468b9733310fd16db8369efe67af68 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_16_i2 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_16_i2 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_16_i2 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index d166829a2dbdf91704ef4e9252632e64274a0fc9..2e123b6d2959265d723efe7264d49c5784f255f7 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_16_i4 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_16_i4 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_16_i4 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index e7cc15236e28944fcb6a031391250a892b938b8d..cd141a692227dbbe95b69d66bd4e6c0b3902b074 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_16_i8 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_16_i8 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_16_i8 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 5bb8ef1f851581437e24c988a60e12aafd74c21f..8426d3af81e4a4034e85dcf504c8ff528b5606a4 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_16_r10 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_16_r10 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_16_r10 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 0b306290aae9cd07443803baf0a0cde5ba7a4408..3244452c601e85d089a438294bfe413d258653f6 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_16_r16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_16_r16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_16_r16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 7a0b15613bc3dd9e9f857a8c27f56e025bfa173b..8057063339c4f50629248fce78e8a524f62118f8 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_16_r4 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_16_r4 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_16_r4 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index e29f80cb03eb72019435bfa49abacb8567e072ba..6c12815a0a11ca593899949469657ff25ab755d5 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_16_r8 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_16_r8 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_16_r8 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 673b7cfa7ee84194b5162b162eb43d51d8265fd0..42c865a6e29bd134b92e04d8e3853ada529294c0 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_4_i1 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_4_i1 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_4_i1 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 533b6824ec35fe11d01a9940c86477214b6a242d..938ceba697470dc9e288a1ae7ead55c52ada2171 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_4_i16 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_4_i16 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_4_i16 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 43b6e15afab496d419953a4dedd8ed70bae38bb8..809d93821dc56e3c9e958822d7bb0b21e63ffc79 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_4_i2 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_4_i2 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_4_i2 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 57241ff01aaaf3de15b964556e1a8d23571ff1fd..5108cbe1366035dd45eb011a5e0e179032d3942f 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_4_i4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_4_i4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_4_i4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index c7f7f360ca925d0f68fd766829d89055141525c8..987b424d7e16ff748b001798f4e6fd14560075e4 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_4_i8 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_4_i8 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_4_i8 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 694b621cafa67533e4c02740ab4f5bc99134dba8..b3101bd6ac8d2cb275d5bef509d397df8ebf1c4d 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_4_r10 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_4_r10 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_4_r10 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index e3c093a15a2046e4a99c409d15d13f3b44ba20be..9b1e5274a3f905e4557d8092f8913fddb3aa5d97 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_4_r16 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_4_r16 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_4_r16 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index a634f31532e42d0db328f2317537a28452dfb978..bf4692c26f08fa7ea5e2309c7b662385019e9a51 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_4_r4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_4_r4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_4_r4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 737de141b2353f57964bdc8d20e5eac9570988c3..774a6734c2d21a8934d4cb80f8b48e7b9d43e34b 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_4_r8 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_4_r8 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_4_r8 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index c1aa00e6cb6760d3fd61b133e56b0fb2a4a3c80c..38890b70dcfb919426157cf072d768a98746ef89 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_8_i1 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_8_i1 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_8_i1 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 2966228a9965d4ac6d2bdd0a273327821c91192a..be99a8ca0b10301616fe9104847342c3b3b1f4da 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_8_i16 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_8_i16 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_8_i16 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 54555a94510315ca449b6aec87264a2fd6b409d9..02a5f645e8ec4e1288a8695a8ef0b6177762816d 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_8_i2 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_8_i2 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_8_i2 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 3a22cb02e9518efed20dd95b682b613f98acf3b8..dca0b768861c3039eca0a9169b5ec928d5b47fa2 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_8_i4 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_8_i4 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_8_i4 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index a756905244da3c9a978869b94cb45687d648f1b2..d11ba2677f2ba8028aa0e761a0a92d6fa4d295e6 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_8_i8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_8_i8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_8_i8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 706bd531fdaaf1212e53c7fcb19fe8f952f093bc..898f1f576736f679b34c18af48c65e3427ea1d09 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_8_r10 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_8_r10 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_8_r10 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index b849d5067cb3def69909715160a0e1db147ed3c9..6dec78a49f96389a4d5cfae73e7213b96d977298 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_8_r16 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_8_r16 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_8_r16 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 745f295d7b528a6fa9f3b8998ad0d28d92d1e6ef..345dbe1a9d160e537235536cd2fc741b136e1e56 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_8_r4 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_8_r4 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_8_r4 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 4441887f698cd5531ab0baa52244a2f5dda3f7fa..bf7020e1a101b641d9c821eda2c9bae5956fbc0c 100644 (file)
@@ -69,11 +69,22 @@ maxloc0_8_r8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mmaxloc0_8_r8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MAXLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MAXLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ smaxloc0_8_r8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 942d92e6bbcd8382e06217646a74082c0dfd87a6..477eb704a868bd5dabddbfc23d2918254e87f572 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_16_i1 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_16_i1 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_16_i1 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 0eca916782425e0cf14af02a9b420b93a8d47d1d..e4a2c1b361b9527d6fc555d1c6f85f4d6bae2920 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_16_i16 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_16_i16 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_16_i16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index c4fa7b339fedaf53875d47a5e78ac7c56e610830..f5d7b587aed231552695fc37f1a37ddcd9e4b645 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_16_i2 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_16_i2 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_16_i2 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 7747f80de712a535c08ddfdb209e3915c78ab483..1fbda541ae3e294571133323224baeffa019135a 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 7fe4b6c67339fc87429711418fe0c736aa1ffffe..59be84cd62c010e834a2c44e18372300a613603c 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_16_i8 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_16_i8 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_16_i8 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 8410240c2539a5eac40c634fbdeff93f37fead7b..3a8c8b7a376e6a6842348049261f7a598f29077c 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_16_r10 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_16_r10 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_16_r10 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 92543f8adc8a1580a2f10e2ead58c7b8b6b586d2..60b97249adae3e32362a104d50f84bb06ee5e782 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_16_r16 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_16_r16 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_16_r16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index be979ad6cb02e3370e0ceb4d4dd1f222cc25099c..a36a9d1133c6e7406b9ed35a861d4bc36b847f8e 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_16_r4 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_16_r4 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_16_r4 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 3af2124b137ff29efa69a02d35648ac9612c5184..9c659c0d3a6ada8bc7db2fb04462c747838d9ba4 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_16_r8 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_16_r8 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_16_r8 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index b588a86a4c7dc74e5944c45539b7fbe2308090ba..1d9132888cd1f56e826570a93032c1bd3977c6f7 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_4_i1 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_4_i1 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_4_i1 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 646cb48f438aaf18157257d8342ac2601a985a6e..92a08bef0bd214ba857b7860e512c522694cccb4 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_4_i16 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_4_i16 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_4_i16 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 8bc84f80c3d9cb8dba3156e10925f99b57003793..b03d90a9592011fa159282ceebf6b9486c9c2c9b 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_4_i2 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_4_i2 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_4_i2 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 51b62618362bd33818edd0f36d31a9b0e1869bec..dc90ec29d8da128df22533d2bd07611ba2e53cc3 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_4_i4 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_4_i4 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_4_i4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 0c52075aaf38fe1eb1d14971fb734e157d476249..78da94438cd67d6376e74c3869414871dd0e2e6f 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_4_i8 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_4_i8 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_4_i8 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 8354f7184aca1a4417b868300a2eed941696b5df..1c83f62f7289f8fe860c1efd08d67a1af2e8ebcd 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_4_r10 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_4_r10 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_4_r10 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 6ee0c0d821851b4dc87eb04cac50683346280ac6..a31d0ac5afaa1a06a860a6bfa1710ca268a2df13 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_4_r16 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_4_r16 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_4_r16 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index c045ab5f5cb6f48a7e00a1418abbccee14cf80bc..49d9cd5463bbdccba9cb6dfdd0af059badaf1ca0 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_4_r4 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_4_r4 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_4_r4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index baae300a03ba161b0fe5dfc191a96e3b9581bdb1..822680a494112647dbb748122d3deaa0450daf7b 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_4_r8 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_4_r8 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_4_r8 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index f09e54a6cc1a69583781127dd3786137f6dc8d9e..5c607532dbc147d6b9fc513b1e934a8a7d751ec1 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_8_i1 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_8_i1 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_8_i1 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 8a8e9c60dd6c55f49bd6db2131c5995759ea4933..feefc084883e47547788420bf869d0b77f0b4174 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_8_i16 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_8_i16 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_8_i16 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 5defc330ea51e68caaf6252185b43dd82078d120..8e4868d73080a3cb6bde5705e04c1d3b47ca2904 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_8_i2 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_8_i2 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_8_i2 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 0bd38f1b25c8896535e08a00f7675a8b5e7afae1..cb9d14d8d1d7f0cd4bb01780ba2ece54148c373c 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_8_i4 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_8_i4 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_8_i4 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 56ed65f05fb9ecd1f8cdbd84af61feceef0523f6..8b8f2a969145272297878095a7727aa768267f68 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_8_i8 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_8_i8 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_8_i8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 0270184df354cf8b22592d3ffa6ec1d406a24555..6aa6ec1941c4db40a51f18427a93e17a5bddc08d 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_8_r10 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_8_r10 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_8_r10 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 93b0c722ea2d2befd4f5cd852fcf7c4389e022eb..59db207cfc00bc677e39d7c6e99b9e8572110ccd 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_8_r16 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_8_r16 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_8_r16 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 3c9104e2c54fb4b0e8aa44d08b7c2e2b0e75cfe5..3640a5dea9633ed8ba891e853aea45a771151d09 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_8_r4 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_8_r4 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_8_r4 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index abb27679bfbe7ab77c8d9f7af2a8bf53d98f6446..93c7c78aec743759e7ac74acf5b0e9d8508c5a55 100644 (file)
@@ -116,7 +116,25 @@ maxloc1_8_r8 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mmaxloc1_8_r8 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ smaxloc1_8_r8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 163e20044d81ec5a8487600c6ca37700fbcbfebb..5158e2a60cc54e1d0b575f6fc1ef3d796d12dfca 100644 (file)
@@ -115,7 +115,25 @@ maxval_i1 (gfc_array_i1 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXVAL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -287,7 +305,35 @@ mmaxval_i1 (gfc_array_i1 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXVAL intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -395,13 +441,21 @@ smaxval_i1 (gfc_array_i1 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXVAL intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index f48efb86143515b1c007b0c70e0f8a876f582c0d..a10c8fa57c9e2270df451e2b5dd8c18abdb3701e 100644 (file)
@@ -115,7 +115,25 @@ maxval_i16 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXVAL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -287,7 +305,35 @@ mmaxval_i16 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXVAL intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -395,13 +441,21 @@ smaxval_i16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXVAL intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 9515b991bcfb29e32e48f2250163f9e8a674d789..3819e0e01017a5c78ee1e4af085b0cf34deab3c1 100644 (file)
@@ -115,7 +115,25 @@ maxval_i2 (gfc_array_i2 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXVAL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -287,7 +305,35 @@ mmaxval_i2 (gfc_array_i2 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXVAL intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -395,13 +441,21 @@ smaxval_i2 (gfc_array_i2 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXVAL intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 95ccb1ff0d9c33073e11e40c84edea10872710db..1076336a02fb221c9a45fb1422934c0c03c46c9b 100644 (file)
@@ -115,7 +115,25 @@ maxval_i4 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXVAL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -287,7 +305,35 @@ mmaxval_i4 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXVAL intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -395,13 +441,21 @@ smaxval_i4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXVAL intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 7d361a8a1539469aee5d64e4fe82998abea2cdab..f527983097c576e1fbcaa2325dd736b8cf1aef35 100644 (file)
@@ -115,7 +115,25 @@ maxval_i8 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXVAL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -287,7 +305,35 @@ mmaxval_i8 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXVAL intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -395,13 +441,21 @@ smaxval_i8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXVAL intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 3a423ff2008b377227500809c8a48ac091d8cc43..fd775c0e4d5a66f796e64eab79ca94a732f887c8 100644 (file)
@@ -115,7 +115,25 @@ maxval_r10 (gfc_array_r10 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXVAL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -287,7 +305,35 @@ mmaxval_r10 (gfc_array_r10 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXVAL intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -395,13 +441,21 @@ smaxval_r10 (gfc_array_r10 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXVAL intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 7ea30a075c7f95de42d1295c973b33d9bf90e52c..671ce1499f93c86fb8253231758eb1f7696c134e 100644 (file)
@@ -115,7 +115,25 @@ maxval_r16 (gfc_array_r16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXVAL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -287,7 +305,35 @@ mmaxval_r16 (gfc_array_r16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXVAL intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -395,13 +441,21 @@ smaxval_r16 (gfc_array_r16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXVAL intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 75d6a06727c46eb6c11dce1ace06e2814b3321a5..674142274e923edb3ab589a725691d92d992a36f 100644 (file)
@@ -115,7 +115,25 @@ maxval_r4 (gfc_array_r4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXVAL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -287,7 +305,35 @@ mmaxval_r4 (gfc_array_r4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXVAL intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -395,13 +441,21 @@ smaxval_r4 (gfc_array_r4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXVAL intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 54e4209d88224571677fd5edc4fb5e9a66d1d25e..136ef20794c08899621fffe74d857e56b0e0b6f4 100644 (file)
@@ -115,7 +115,25 @@ maxval_r8 (gfc_array_r8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MAXVAL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -287,7 +305,35 @@ mmaxval_r8 (gfc_array_r8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MAXVAL intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MAXVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -395,13 +441,21 @@ smaxval_r8 (gfc_array_r8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MAXVAL intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index bb0fdd952dc42a029da9244d71823e2e98c38d13..9529997a37473010c84784b3b3b8531bc74feaea 100644 (file)
@@ -69,11 +69,22 @@ minloc0_16_i1 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_16_i1 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_16_i1 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 428340ca9a7c935935bfee9a09addeffb378c0aa..667bfd8a3491b994b64e7daca589bbce924eba7a 100644 (file)
@@ -69,11 +69,22 @@ minloc0_16_i16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_16_i16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_16_i16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 523b980fb8f51d169de0433e112a4d7f081bf33d..a5c499410bd82b7fed771d8ee3c50eaf285f384b 100644 (file)
@@ -69,11 +69,22 @@ minloc0_16_i2 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_16_i2 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_16_i2 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 67062d3d9957b2ca5865089839d961cd8087f8e9..7c9292cddb36e94cef9d1e928dc5243a1ed3e470 100644 (file)
@@ -69,11 +69,22 @@ minloc0_16_i4 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_16_i4 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_16_i4 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 2b62a6738043d6f9e0828683b9fa2dff843c85da..022e49c970786d4552b19a63bfec4b3c75d5cbf3 100644 (file)
@@ -69,11 +69,22 @@ minloc0_16_i8 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_16_i8 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_16_i8 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 1329d30adaac9a05e8dc9dc8df34e03aff34f9d5..a99c5307afcb46ab975b7ad2d471f51324f9660f 100644 (file)
@@ -69,11 +69,22 @@ minloc0_16_r10 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_16_r10 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_16_r10 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index a50b0289f29d1a57600877aa3fb998413adbaf4d..2b2dcaacb23997ad3f8cda79eb9c18149ae5d00a 100644 (file)
@@ -69,11 +69,22 @@ minloc0_16_r16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_16_r16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_16_r16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index d33368f8badd00a9fdf93bd4b700b6bc7e4896e8..f265ae4756121b4ba2b37b442d01cc2272e73387 100644 (file)
@@ -69,11 +69,22 @@ minloc0_16_r4 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_16_r4 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_16_r4 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 37e0b581c71e9f89d753f81058d72f96140bbda4..59429f22ee92cf2997da24a555c646a04650fbf7 100644 (file)
@@ -69,11 +69,22 @@ minloc0_16_r8 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_16_r8 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_16_r8 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 18ae10b335398f823b3a9f6ee00451a8e359cc08..24463ead318dade37aace4eb638ac930e4e7c918 100644 (file)
@@ -69,11 +69,22 @@ minloc0_4_i1 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_4_i1 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_4_i1 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 7ca79b16b7a75624959f0f311df3b87aa92d4670..ddcbc60eab96887ba97cf30052efc78023f13e37 100644 (file)
@@ -69,11 +69,22 @@ minloc0_4_i16 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_4_i16 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_4_i16 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index c6789d990e69adcd6583858a8bce5728fcc12745..60b2c3fcb5799cfee68329511a6841b316eecefc 100644 (file)
@@ -69,11 +69,22 @@ minloc0_4_i2 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_4_i2 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_4_i2 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 13524f1e84b8bb8198a9ee7f45dd316728c07ece..6431f38ba5916ad4d0d7169d8599a8bbd2849872 100644 (file)
@@ -69,11 +69,22 @@ minloc0_4_i4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_4_i4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_4_i4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 9d80fd35f9b1a1c73d29e8214114061503d533eb..6ffeac577fc68d5f18c570bf927c6c297c43ccec 100644 (file)
@@ -69,11 +69,22 @@ minloc0_4_i8 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_4_i8 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_4_i8 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 58f1805d448201c3b3e3c375769761f1aeaf0467..e4f10024c50ed1656127db5a9d02cc455e3c6de6 100644 (file)
@@ -69,11 +69,22 @@ minloc0_4_r10 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_4_r10 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_4_r10 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 1a1bc031c5d2096413c994857b5976541ef4fd9a..0f9fb9804679af61242dfd164fa847266c030e63 100644 (file)
@@ -69,11 +69,22 @@ minloc0_4_r16 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_4_r16 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_4_r16 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 3c312c6921da5569fc530d172f07f12d9e0d78d2..14c63b35e133297b45e7acc9568ff386adf4a232 100644 (file)
@@ -69,11 +69,22 @@ minloc0_4_r4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_4_r4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_4_r4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index ad3b534b9725b78cec50f8a1ae511c9ee29563b5..168d0ad26211a721bb39d426cde9ea4a52b43a6b 100644 (file)
@@ -69,11 +69,22 @@ minloc0_4_r8 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_4_r8 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_4_r8 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 4aa5f18c282e217f8874cacbf13f4792df03b777..6dcafbae05de187159bc7b3aa290aab86dfefe5b 100644 (file)
@@ -69,11 +69,22 @@ minloc0_8_i1 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_8_i1 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_8_i1 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 88adc44a861ea2f67cf5d5f3179903bd701fbdff..f2afae1e643f968915ef080a1a6cf46ba552f90e 100644 (file)
@@ -69,11 +69,22 @@ minloc0_8_i16 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_8_i16 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_8_i16 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index c7e5f1352de9e333f0543efeee2f7fc52a6507e4..d0dd13744276de4ef46fc7ce5192b784bf7b80dc 100644 (file)
@@ -69,11 +69,22 @@ minloc0_8_i2 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_8_i2 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_8_i2 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 401349e3ea5b6b08f694dbb486af285f9843d6e5..a4c921acfe3f84217e09b71c9ce142ef28a884bb 100644 (file)
@@ -69,11 +69,22 @@ minloc0_8_i4 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_8_i4 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_8_i4 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index bc3abcaf2ec739f505ea921f8ae6ee541863abb6..26aa9476cf44b7a52355474471722d846e4848e2 100644 (file)
@@ -69,11 +69,22 @@ minloc0_8_i8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_8_i8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_8_i8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 90f652e25b3f1d335021a9d11627031e198f0f45..b1705ebc5fd8a11a3a849104b16f855edd2dd0c3 100644 (file)
@@ -69,11 +69,22 @@ minloc0_8_r10 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_8_r10 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_8_r10 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 67d5e0c8e0284f305acf098834b8aec4f1f000a4..84b95baa6a597d2122cf925391a8acd5bca098e4 100644 (file)
@@ -69,11 +69,22 @@ minloc0_8_r16 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_8_r16 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_8_r16 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index a542e9dea49d3ecb5b30ffac33de9c6486bee94d..d7b8d547ecec184deaff58c837e149c0696796c0 100644 (file)
@@ -69,11 +69,22 @@ minloc0_8_r4 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_8_r4 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_8_r4 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index 98d6a8ef86562958d017cf2e13e965a2aedc6816..6ac0bfe1b00eaaff216c68b1c16b00e3d350202d 100644 (file)
@@ -69,11 +69,22 @@ minloc0_8_r8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -182,11 +193,40 @@ mminloc0_8_r8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
-
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " MINLOC intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in MINLOC intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -312,11 +352,20 @@ sminloc0_8_r8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index c029050fcf83571f7c4adeb98896e01b9e180958..c1baf547b4b854607249022de8f6f629e81b327e 100644 (file)
@@ -116,7 +116,25 @@ minloc1_16_i1 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_16_i1 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_16_i1 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 88f7e0c64cb67b11762268c16e022249cbcd77cb..db992cb4a7cfcd4e15caa893089245f3f38f1743 100644 (file)
@@ -116,7 +116,25 @@ minloc1_16_i16 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_16_i16 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_16_i16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 2268b2ebfdd50fa6e52cc6f87938c713bad2f8c0..523a4affff4fe55aa4278c3fccc50e7e64d82bfe 100644 (file)
@@ -116,7 +116,25 @@ minloc1_16_i2 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_16_i2 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_16_i2 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index e4a60ac0e5661d09ac49135a304d742bee95d9d0..e8d5fc397c6e5a62699edf8cd63378f2dd5c1891 100644 (file)
@@ -116,7 +116,25 @@ minloc1_16_i4 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_16_i4 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_16_i4 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index b8222989c8cb0c180b72b7822cf377414e57cdf5..8c3e4e482426e6c12a6b6156ebca9c86e276a671 100644 (file)
@@ -116,7 +116,25 @@ minloc1_16_i8 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_16_i8 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_16_i8 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 982a048a7d912c9619205e0c5b4dfe66752a56b5..7aa89a947ccc0de945dd4bb590d3674b6925bd4e 100644 (file)
@@ -116,7 +116,25 @@ minloc1_16_r10 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_16_r10 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_16_r10 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 1e43b24aa1465e9bc3ef2f8dbc5cbc225aec2439..5b814451d6001ff6f156ae1977a360ebe98dee4f 100644 (file)
@@ -116,7 +116,25 @@ minloc1_16_r16 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_16_r16 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_16_r16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 7f93dd0b95631629b05aec27a608fc6eb6369cca..b3c61552ffedc9a368380d5f27e705a1368ad182 100644 (file)
@@ -116,7 +116,25 @@ minloc1_16_r4 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_16_r4 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_16_r4 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 96eaa9c139bd514536c0e7a87e5ccbaa57cccbd1..0a4b1b507776aa8019f1b7bd8e8d00848f276321 100644 (file)
@@ -116,7 +116,25 @@ minloc1_16_r8 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_16_r8 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_16_r8 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index deb70a155d90dd8806cff2cc2ec20ee1d49a3e88..9cebebe10a033929b5fb2bd91e521023cbf0987c 100644 (file)
@@ -116,7 +116,25 @@ minloc1_4_i1 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_4_i1 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_4_i1 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 8252d1874d7801aae89c5fb8d426d6e4f807630e..a984a153d380c71b2eddbc624bf1da2f35dd2f5d 100644 (file)
@@ -116,7 +116,25 @@ minloc1_4_i16 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_4_i16 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_4_i16 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 27768fb61344ad347b7fea7a9bfa675ab85eeb39..685f9793b73feef33600f03dbef0eb132e5ea34b 100644 (file)
@@ -116,7 +116,25 @@ minloc1_4_i2 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_4_i2 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_4_i2 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 11579c367f92c9779a9473a306afc32e1556feed..f44a631d352bf3ce5cc88654c43e8dc39361bb57 100644 (file)
@@ -116,7 +116,25 @@ minloc1_4_i4 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_4_i4 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_4_i4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index cf54b1a0d40c8229c1e3cec7028a2ba8981ee094..f6858c028205368bbe11eb31de1b5696da01dd58 100644 (file)
@@ -116,7 +116,25 @@ minloc1_4_i8 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_4_i8 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_4_i8 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 990d7ea43c8c381aecf7d4907b144a21843e45f4..8e359fe15193427d1715b1124402c37ffe805622 100644 (file)
@@ -116,7 +116,25 @@ minloc1_4_r10 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_4_r10 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_4_r10 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index a380df29276d95b42deedeb3515236daabd980c3..11cb9c8f96271de741b8ab9523f707d7cb00dbd3 100644 (file)
@@ -116,7 +116,25 @@ minloc1_4_r16 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_4_r16 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_4_r16 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 62e0b2c67d905b6631255ca7b02215b2a2f502c7..31aa1f7a621046ce49acc4526cebbd9cd58371f4 100644 (file)
@@ -116,7 +116,25 @@ minloc1_4_r4 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_4_r4 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_4_r4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 16b210ffb45e2a7d5a053329fde079318f9495f1..a7a56b67f897f58e74ca039eee377a4db3e58bc3 100644 (file)
@@ -116,7 +116,25 @@ minloc1_4_r8 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_4_r8 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_4_r8 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index e50acae5a41f726d94462307d1d774e03e20b8b2..1fae32b3fb6654ba13e62315fc093152a48de197 100644 (file)
@@ -116,7 +116,25 @@ minloc1_8_i1 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_8_i1 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_8_i1 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index ed20ec71bc3c004169e8fe7614fbea81e42d7927..0d31c944b851f871bc2c9523630e45073ed25a61 100644 (file)
@@ -116,7 +116,25 @@ minloc1_8_i16 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_8_i16 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_8_i16 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 743c584ba7c67d50632aef18b8f3228812eff1a2..88655757ddc05387362abbc88ffb0e63f8e82784 100644 (file)
@@ -116,7 +116,25 @@ minloc1_8_i2 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_8_i2 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_8_i2 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 1d64d2cf021f9063835a3a589f17dfe1c7bddf8f..31ee2385b36d8ea21d6d58108accbd322512bc6f 100644 (file)
@@ -116,7 +116,25 @@ minloc1_8_i4 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_8_i4 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_8_i4 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index d658451d9fe9ca02ce4b298de7a58c5275784d9a..13577aba741ed02ee4554ccbc8834282d3775e8c 100644 (file)
@@ -116,7 +116,25 @@ minloc1_8_i8 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_8_i8 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_8_i8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 1b6888ef42879ef3c8fef0411c3a417f1bba5469..726aa1c89370bc475db2eb5271596b3b13ebeba6 100644 (file)
@@ -116,7 +116,25 @@ minloc1_8_r10 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_8_r10 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_8_r10 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index e59b187e70fda3f416d8bcf1ee21e60b71e10777..aaf9797856db193531fd4e393e7f4502d0df051a 100644 (file)
@@ -116,7 +116,25 @@ minloc1_8_r16 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_8_r16 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_8_r16 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index d7d69e59684fa2d8643af19fdc5f753af34ca9e5..6b0bcec629cff65ad91daabb04478404855d62c0 100644 (file)
@@ -116,7 +116,25 @@ minloc1_8_r4 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_8_r4 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_8_r4 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 03f88bd77b0f7abccd26152e3ae571b1076302e6..8a8d266393dfb47abf2e639310edc8f5ead5c286 100644 (file)
@@ -116,7 +116,25 @@ minloc1_8_r8 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINLOC intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -293,7 +311,35 @@ mminloc1_8_r8 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINLOC intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINLOC intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -406,13 +452,21 @@ sminloc1_8_r8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINLOC intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 37e0b16de2a6d42a23ed7f0280f0871979792eb9..ef31ba0c8d8f6f8f1d5377cb991092d6a09bf5fe 100644 (file)
@@ -115,7 +115,25 @@ minval_i1 (gfc_array_i1 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINVAL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -287,7 +305,35 @@ mminval_i1 (gfc_array_i1 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINVAL intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -395,13 +441,21 @@ sminval_i1 (gfc_array_i1 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINVAL intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index fdac2877e179da04ef987b9095bab39acdc3cf18..8d7bf50c4aed28451c1946bd4efaa1ead40796a8 100644 (file)
@@ -115,7 +115,25 @@ minval_i16 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINVAL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -287,7 +305,35 @@ mminval_i16 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINVAL intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -395,13 +441,21 @@ sminval_i16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINVAL intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 593497393cf07608b3e131a9c82d78d7a53538fd..c3d63f6482b74b3cd72a771de6acc3cd9e3e50ff 100644 (file)
@@ -115,7 +115,25 @@ minval_i2 (gfc_array_i2 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINVAL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -287,7 +305,35 @@ mminval_i2 (gfc_array_i2 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINVAL intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -395,13 +441,21 @@ sminval_i2 (gfc_array_i2 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINVAL intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 660f0e7378019d3eefb2392c15ec2b4917407522..48ea446db9cbb82203cfde4940b3c9879c381a30 100644 (file)
@@ -115,7 +115,25 @@ minval_i4 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINVAL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -287,7 +305,35 @@ mminval_i4 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINVAL intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -395,13 +441,21 @@ sminval_i4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINVAL intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index d7d4c09cf2b23a9dbbf6239104c9d8c153dd1291..cd2100a05ace27b1da9aa35050a27007ac7fa865 100644 (file)
@@ -115,7 +115,25 @@ minval_i8 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINVAL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -287,7 +305,35 @@ mminval_i8 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINVAL intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -395,13 +441,21 @@ sminval_i8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINVAL intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 4769f0cf38f50574b97b173fde90d188f0e71b47..10d0302d4ee1d5e44dd2a6ff62ac6b8f41f4acd5 100644 (file)
@@ -115,7 +115,25 @@ minval_r10 (gfc_array_r10 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINVAL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -287,7 +305,35 @@ mminval_r10 (gfc_array_r10 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINVAL intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -395,13 +441,21 @@ sminval_r10 (gfc_array_r10 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINVAL intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 6754072e1505add7b097558eb8a5806045e96363..da6e7963a3a1cffb0d0c7d9629bf0c7d4f4288e5 100644 (file)
@@ -115,7 +115,25 @@ minval_r16 (gfc_array_r16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINVAL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -287,7 +305,35 @@ mminval_r16 (gfc_array_r16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINVAL intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -395,13 +441,21 @@ sminval_r16 (gfc_array_r16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINVAL intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index ab7d909fbdc7b6e3b9f90fcb0dd87d03748ebeca..745889a813113ea8fc8235e130f23cae8a343466 100644 (file)
@@ -115,7 +115,25 @@ minval_r4 (gfc_array_r4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINVAL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -287,7 +305,35 @@ mminval_r4 (gfc_array_r4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINVAL intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -395,13 +441,21 @@ sminval_r4 (gfc_array_r4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINVAL intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 53c7e448805a41e5b74a02f14f8cacee9df234c3..1b0fec0174a5f4d650d2629b719deaa169043b07 100644 (file)
@@ -115,7 +115,25 @@ minval_r8 (gfc_array_r8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " MINVAL intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -287,7 +305,35 @@ mminval_r8 (gfc_array_r8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in MINVAL intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " MINVAL intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -395,13 +441,21 @@ sminval_r8 (gfc_array_r8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in MINVAL intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 34d4e94806e1464b5c777965a693266b743aeeaa..701835f9a43ed992419daa3b1edcd6be22ab4d4f 100644 (file)
@@ -115,7 +115,25 @@ product_c10 (gfc_array_c10 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " PRODUCT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ mproduct_c10 (gfc_array_c10 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in PRODUCT intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ sproduct_c10 (gfc_array_c10 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in PRODUCT intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index e95dbac079a6d0a1b74041de5a70914c619d7fd3..1d58a7687568947565a01a982845ac26e48a3b6e 100644 (file)
@@ -115,7 +115,25 @@ product_c16 (gfc_array_c16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " PRODUCT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ mproduct_c16 (gfc_array_c16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in PRODUCT intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ sproduct_c16 (gfc_array_c16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in PRODUCT intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 6c17247c7aca0b99971245a09c238d7c7f33637c..3754fcb5cae75b1e0b9a5656002f0af62ba1a591 100644 (file)
@@ -115,7 +115,25 @@ product_c4 (gfc_array_c4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " PRODUCT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ mproduct_c4 (gfc_array_c4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in PRODUCT intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ sproduct_c4 (gfc_array_c4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in PRODUCT intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 5d26d3e7cf1185267ba671d3b1a23e8be44796cc..6312451b794d5212b14653467b01119b31c29066 100644 (file)
@@ -115,7 +115,25 @@ product_c8 (gfc_array_c8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " PRODUCT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ mproduct_c8 (gfc_array_c8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in PRODUCT intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ sproduct_c8 (gfc_array_c8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in PRODUCT intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 9926bdc6af85e4e79e840355fd929b0621c1ba74..7003129a4f7bcf017000e0d5e5d67a72abef16f2 100644 (file)
@@ -115,7 +115,25 @@ product_i1 (gfc_array_i1 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " PRODUCT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ mproduct_i1 (gfc_array_i1 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in PRODUCT intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ sproduct_i1 (gfc_array_i1 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in PRODUCT intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index f667a6578ce1934477ab8559197ff11bc474d6eb..3c448082195b2bc94725c142f5ad570eecb55946 100644 (file)
@@ -115,7 +115,25 @@ product_i16 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " PRODUCT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ mproduct_i16 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in PRODUCT intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ sproduct_i16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in PRODUCT intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index a862404146b479697b48ab6dd7964e820b1526f2..ca57d29dc2078428f09e7ec79e61a7520a644285 100644 (file)
@@ -115,7 +115,25 @@ product_i2 (gfc_array_i2 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " PRODUCT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ mproduct_i2 (gfc_array_i2 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in PRODUCT intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ sproduct_i2 (gfc_array_i2 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in PRODUCT intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 5a8a337bc3385628243d3db260f73092ce9061de..d31eb6e15989f11bad6c96c0d8387207637d5ba8 100644 (file)
@@ -115,7 +115,25 @@ product_i4 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " PRODUCT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ mproduct_i4 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in PRODUCT intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ sproduct_i4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in PRODUCT intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 29c15838fdef948636304d7e1e50be01686a8d97..8867aaea2fdfc193145628fe998b014e8a2df268 100644 (file)
@@ -115,7 +115,25 @@ product_i8 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " PRODUCT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ mproduct_i8 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in PRODUCT intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ sproduct_i8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in PRODUCT intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 63ef48af791e83789c8613d7b9656cc58136a13e..235b8a664ddd64ffd6373c08013aeed71b209b03 100644 (file)
@@ -115,7 +115,25 @@ product_r10 (gfc_array_r10 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " PRODUCT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ mproduct_r10 (gfc_array_r10 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in PRODUCT intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ sproduct_r10 (gfc_array_r10 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in PRODUCT intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index bb232c5261d27a093cbe7d44c6ca6556ffbf8f48..2f837e303f1ca2494f8575c0e37213a035a3f684 100644 (file)
@@ -115,7 +115,25 @@ product_r16 (gfc_array_r16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " PRODUCT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ mproduct_r16 (gfc_array_r16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in PRODUCT intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ sproduct_r16 (gfc_array_r16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in PRODUCT intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 6899f3446539382f1e6d072cc3c52c7669896b36..4e6c3d178ef6ed289b77072185ca7759e9823311 100644 (file)
@@ -115,7 +115,25 @@ product_r4 (gfc_array_r4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " PRODUCT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ mproduct_r4 (gfc_array_r4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in PRODUCT intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ sproduct_r4 (gfc_array_r4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in PRODUCT intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index e2d613f3063b453b4b0cc777597264de83def703..849d404869d2f10e6c6be9f6f8dee155bcbff51a 100644 (file)
@@ -115,7 +115,25 @@ product_r8 (gfc_array_r8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " PRODUCT intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ mproduct_r8 (gfc_array_r8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in PRODUCT intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " PRODUCT intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ sproduct_r8 (gfc_array_r8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in PRODUCT intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 46106c95edb3d4bc35cb77996fb6848c643ac12e..f3da3849808163cdfc91d9273b2ba82e899520bd 100644 (file)
@@ -115,7 +115,25 @@ sum_c10 (gfc_array_c10 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " SUM intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ msum_c10 (gfc_array_c10 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in SUM intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ ssum_c10 (gfc_array_c10 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in SUM intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 53040b4a5537bef0ebac27eaf36df9ca5e26c067..df79daf313a5d027b0fba0cad126a7c1ccd966f6 100644 (file)
@@ -115,7 +115,25 @@ sum_c16 (gfc_array_c16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " SUM intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ msum_c16 (gfc_array_c16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in SUM intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ ssum_c16 (gfc_array_c16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in SUM intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 89cc92b8304ddc8159ea89dbf3c25acfeff92a13..9ef9e8399f7cef72a05fb4a78e03b7daca25a0c6 100644 (file)
@@ -115,7 +115,25 @@ sum_c4 (gfc_array_c4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " SUM intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ msum_c4 (gfc_array_c4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in SUM intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ ssum_c4 (gfc_array_c4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in SUM intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index f78105d9bd600dbd457a8b170665fa8754e9cbb9..a7f7392e747598744e9bc5de211d3a14805c27cb 100644 (file)
@@ -115,7 +115,25 @@ sum_c8 (gfc_array_c8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " SUM intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ msum_c8 (gfc_array_c8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in SUM intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ ssum_c8 (gfc_array_c8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in SUM intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index f20bd871168814760376662abbf12deeb71bf145..8740fb79b5ee374990af7eb520cf530fba0842c7 100644 (file)
@@ -115,7 +115,25 @@ sum_i1 (gfc_array_i1 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " SUM intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ msum_i1 (gfc_array_i1 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in SUM intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ ssum_i1 (gfc_array_i1 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in SUM intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 19c4a71cf8aa1eb9c86dbecf2a4825fb7c597666..6500d178fa4d17c42916ca7080e6f78eb9253aef 100644 (file)
@@ -115,7 +115,25 @@ sum_i16 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " SUM intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ msum_i16 (gfc_array_i16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in SUM intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ ssum_i16 (gfc_array_i16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in SUM intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 984b23be1f241dd0de466b8ad235097f663a3826..10202c35ac8a909663dd492dd278fa646dcd60d7 100644 (file)
@@ -115,7 +115,25 @@ sum_i2 (gfc_array_i2 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " SUM intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ msum_i2 (gfc_array_i2 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in SUM intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ ssum_i2 (gfc_array_i2 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in SUM intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 93569f49df2c22f938fe21f4b3eb050369fb9bda..4d0e8a4a963eb0562e2c7484761192b85526fbbc 100644 (file)
@@ -115,7 +115,25 @@ sum_i4 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " SUM intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ msum_i4 (gfc_array_i4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in SUM intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ ssum_i4 (gfc_array_i4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in SUM intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 67f303c163b9d453b3b842e4d30cc99a5d796d29..8b280a81e0d1cfce08b4f92d4d2672337543e48f 100644 (file)
@@ -115,7 +115,25 @@ sum_i8 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " SUM intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ msum_i8 (gfc_array_i8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in SUM intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ ssum_i8 (gfc_array_i8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in SUM intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index aa260f05c67c408b2e859226a78695a5dd02256f..0fd8775f93ca3b30705487baadb5b8a834727703 100644 (file)
@@ -115,7 +115,25 @@ sum_r10 (gfc_array_r10 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " SUM intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ msum_r10 (gfc_array_r10 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in SUM intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ ssum_r10 (gfc_array_r10 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in SUM intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 286b9869eba21c28f58925db1bb18ddd427ea57a..8903b64d8bcf5ee88a5482feef021d1aef90e8e1 100644 (file)
@@ -115,7 +115,25 @@ sum_r16 (gfc_array_r16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " SUM intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ msum_r16 (gfc_array_r16 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in SUM intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ ssum_r16 (gfc_array_r16 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in SUM intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index d9ecfd44726313371791ed01e724a78af7c8de3d..1d3f2d09008e39525ca98fb586e9c0eb7302639b 100644 (file)
@@ -115,7 +115,25 @@ sum_r4 (gfc_array_r4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " SUM intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ msum_r4 (gfc_array_r4 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in SUM intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ ssum_r4 (gfc_array_r4 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in SUM intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index ffa7b878230d80aa892725ff4542b4289659d455..d049876d5f2f27a1438141f5db0d933a2d97fee7 100644 (file)
@@ -115,7 +115,25 @@ sum_r8 (gfc_array_r8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " SUM intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -286,7 +304,35 @@ msum_r8 (gfc_array_r8 * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in SUM intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " SUM intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -394,13 +440,21 @@ ssum_r8 (gfc_array_r8 * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in SUM intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index 720a4c05851ce917e03454b554a6149c840192d7..a49d33b9311eff0f703b6ea579c842be0aa6463e 100644 (file)
@@ -36,11 +36,22 @@ name`'rtype_qual`_'atype_code (rtype * const restrict retarray,
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in u_name intrinsic"
+                          " should be 1, is %d", ret_rank);
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " u_name intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       }
     }
 
   dstride = retarray->dim[0].stride;
@@ -141,11 +152,40 @@ void
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank, mask_rank;
+         index_type ret_extent;
+         int n;
+         index_type array_extent, mask_extent;
+
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in u_name intrinsic"
+                          " should be 1, is %d", ret_rank);
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+         if (ret_extent != rank)
+           runtime_error ("Incorrect extent in return value of"
+                          " u_name intrnisic: is %ld, should be %d",
+                          (long int) ret_extent, rank);
+       
+         mask_rank = GFC_DESCRIPTOR_RANK (mask);
+         if (rank != mask_rank)
+           runtime_error ("rank of MASK argument in u_name intrnisic"
+                          "should be %d, is %d", rank, mask_rank);
+
+         for (n=0; n<rank; n++)
+           {
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " u_name intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
@@ -270,11 +310,20 @@ void
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in u_name intrinsic"
+                          " should be 1, is %d", ret_rank);
+
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
     }
 
   dstride = retarray->dim[0].stride;
index d8a661c2a8908c6f169c443a60d41e8951669240..965fff8acc53cb8beced55b09e024aeba2e985b4 100644 (file)
@@ -98,7 +98,25 @@ name`'rtype_qual`_'atype_code (rtype * const restrict retarray,
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in"
+                      " u_name intrinsic: is %d, should be %d",
+                      GFC_DESCRIPTOR_RANK (retarray), rank);
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " u_name intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -269,7 +287,35 @@ void
   else
     {
       if (rank != GFC_DESCRIPTOR_RANK (retarray))
-       runtime_error ("rank of return array incorrect");
+       runtime_error ("rank of return array incorrect in u_name intrinsic");
+
+      if (compile_options.bounds_check)
+       {
+         for (n=0; n < rank; n++)
+           {
+             index_type ret_extent;
+
+             ret_extent = retarray->dim[n].ubound + 1
+               - retarray->dim[n].lbound;
+             if (extent[n] != ret_extent)
+               runtime_error ("Incorrect extent in return value of"
+                              " u_name intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) ret_extent, (long int) extent[n]);
+           }
+          for (n=0; n<= rank; n++)
+            {
+              index_type mask_extent, array_extent;
+
+             array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
+             mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound;
+             if (array_extent != mask_extent)
+               runtime_error ("Incorrect extent in MASK argument of"
+                              " u_name intrinsic in dimension %d:"
+                              " is %ld, should be %ld", n + 1,
+                              (long int) mask_extent, (long int) array_extent);
+           }
+       }
     }
 
   for (n = 0; n < rank; n++)
@@ -376,13 +422,21 @@ void
     }
   else
     {
-      if (GFC_DESCRIPTOR_RANK (retarray) != 1)
-       runtime_error ("rank of return array does not equal 1");
+      if (compile_options.bounds_check)
+       {
+         int ret_rank;
+         index_type ret_extent;
 
-      if (retarray->dim[0].ubound + 1 - retarray->dim[0].lbound != rank)
-        runtime_error ("dimension of return array incorrect");
-    }
+         ret_rank = GFC_DESCRIPTOR_RANK (retarray);
+         if (ret_rank != 1)
+           runtime_error ("rank of return array in u_name intrinsic"
+                          " should be 1, is %d", ret_rank);
 
+         ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
+           if (ret_extent != rank)
+             runtime_error ("dimension of return array incorrect");
+       }
+    }
     dstride = retarray->dim[0].stride;
     dest = retarray->data;
 
index acd3d2ce604bbaf3f0b2acd38dfa8a87914ed8d2..51ee40d049d3b2dd98b62650c722334743f4fe68 100644 (file)
@@ -30,4 +30,6 @@ define(rtype_qual,`_'rtype_kind)dnl
 define(atype_max, atype_name`_HUGE')dnl
 define(atype_min,ifelse(regexp(file, `_\(.\)[0-9]*\.c$', `\1'),`i',`(-'atype_max`-1)',`-'atype_max))dnl
 define(name, regexp(regexp(file, `[^/]*$', `\&'), `^\([^_]*\)_', `\1'))dnl
+define(`upcase', `translit(`$*', `a-z', `A-Z')')dnl
+define(`u_name',`regexp(upcase(name),`\([A-Z]*\)',`\1')')dnl
 define(rtype_ccode,ifelse(rtype_letter,`i',rtype_kind,rtype_code))dnl