diff options
author | Jakub Jelinek <jakub@redhat.com> | 2009-07-24 09:57:13 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2009-07-24 09:57:13 +0200 |
commit | 80927a562e1ec4a38a12f4b09b86f2f3ca9f253e (patch) | |
tree | 3a1ba521bd64c06116c292171eb8e9008c0f6c2b /gcc/testsuite | |
parent | 3a802a9e6ddcf43f9c211b417f8435e3b63ce3cc (diff) | |
download | gcc-80927a562e1ec4a38a12f4b09b86f2f3ca9f253e.zip gcc-80927a562e1ec4a38a12f4b09b86f2f3ca9f253e.tar.gz gcc-80927a562e1ec4a38a12f4b09b86f2f3ca9f253e.tar.bz2 |
re PR fortran/40643 (maxloc/minloc: Wrong result for NaN at position 1)
PR fortran/40643
PR fortran/31067
* trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc,
gfc_conv_intrinsic_minmaxval): Handle Infinities and NaNs properly,
optimize.
* trans-array.c (gfc_trans_scalarized_loop_end): No longer static.
* trans-array.h (gfc_trans_scalarized_loop_end): New prototype.
* libgfortran.h (GFC_REAL_4_INFINITY, GFC_REAL_8_INFINITY,
GFC_REAL_10_INFINITY, GFC_REAL_16_INFINITY, GFC_REAL_4_QUIET_NAN,
GFC_REAL_8_QUIET_NAN, GFC_REAL_10_QUIET_NAN, GFC_REAL_16_QUIET_NAN):
Define.
* m4/iparm.m4 (atype_inf, atype_nan): Define.
* m4/ifunction.m4: Formatting.
* m4/iforeach.m4: Likewise.
(START_FOREACH_FUNCTION): Initialize dest to all 1s, not all 0s.
(START_FOREACH_BLOCK, FINISH_FOREACH_FUNCTION,
FINISH_MASKED_FOREACH_FUNCTION): Run foreach block inside a loop
until count[0] == extent[0].
* m4/minval.m4: Formatting. Handle NaNs and infinities. Optimize.
* m4/maxval.m4: Likewise.
* m4/minloc0.m4: Likewise.
* m4/maxloc0.m4: Likewise.
* m4/minloc1.m4: Likewise.
* m4/maxloc1.m4: Likewise.
* generated/maxloc0_16_i16.c: Regenerated.
* generated/maxloc0_16_i1.c: Likewise.
* generated/maxloc0_16_i2.c: Likewise.
* generated/maxloc0_16_i4.c: Likewise.
* generated/maxloc0_16_i8.c: Likewise.
* generated/maxloc0_16_r10.c: Likewise.
* generated/maxloc0_16_r16.c: Likewise.
* generated/maxloc0_16_r4.c: Likewise.
* generated/maxloc0_16_r8.c: Likewise.
* generated/maxloc0_4_i16.c: Likewise.
* generated/maxloc0_4_i1.c: Likewise.
* generated/maxloc0_4_i2.c: Likewise.
* generated/maxloc0_4_i4.c: Likewise.
* generated/maxloc0_4_i8.c: Likewise.
* generated/maxloc0_4_r10.c: Likewise.
* generated/maxloc0_4_r16.c: Likewise.
* generated/maxloc0_4_r4.c: Likewise.
* generated/maxloc0_4_r8.c: Likewise.
* generated/maxloc0_8_i16.c: Likewise.
* generated/maxloc0_8_i1.c: Likewise.
* generated/maxloc0_8_i2.c: Likewise.
* generated/maxloc0_8_i4.c: Likewise.
* generated/maxloc0_8_i8.c: Likewise.
* generated/maxloc0_8_r10.c: Likewise.
* generated/maxloc0_8_r16.c: Likewise.
* generated/maxloc0_8_r4.c: Likewise.
* generated/maxloc0_8_r8.c: Likewise.
* generated/maxloc1_16_i16.c: Likewise.
* generated/maxloc1_16_i1.c: Likewise.
* generated/maxloc1_16_i2.c: Likewise.
* generated/maxloc1_16_i4.c: Likewise.
* generated/maxloc1_16_i8.c: Likewise.
* generated/maxloc1_16_r10.c: Likewise.
* generated/maxloc1_16_r16.c: Likewise.
* generated/maxloc1_16_r4.c: Likewise.
* generated/maxloc1_16_r8.c: Likewise.
* generated/maxloc1_4_i16.c: Likewise.
* generated/maxloc1_4_i1.c: Likewise.
* generated/maxloc1_4_i2.c: Likewise.
* generated/maxloc1_4_i4.c: Likewise.
* generated/maxloc1_4_i8.c: Likewise.
* generated/maxloc1_4_r10.c: Likewise.
* generated/maxloc1_4_r16.c: Likewise.
* generated/maxloc1_4_r4.c: Likewise.
* generated/maxloc1_4_r8.c: Likewise.
* generated/maxloc1_8_i16.c: Likewise.
* generated/maxloc1_8_i1.c: Likewise.
* generated/maxloc1_8_i2.c: Likewise.
* generated/maxloc1_8_i4.c: Likewise.
* generated/maxloc1_8_i8.c: Likewise.
* generated/maxloc1_8_r10.c: Likewise.
* generated/maxloc1_8_r16.c: Likewise.
* generated/maxloc1_8_r4.c: Likewise.
* generated/maxloc1_8_r8.c: Likewise.
* generated/maxval_i16.c: Likewise.
* generated/maxval_i1.c: Likewise.
* generated/maxval_i2.c: Likewise.
* generated/maxval_i4.c: Likewise.
* generated/maxval_i8.c: Likewise.
* generated/maxval_r10.c: Likewise.
* generated/maxval_r16.c: Likewise.
* generated/maxval_r4.c: Likewise.
* generated/maxval_r8.c: Likewise.
* generated/minloc0_16_i16.c: Likewise.
* generated/minloc0_16_i1.c: Likewise.
* generated/minloc0_16_i2.c: Likewise.
* generated/minloc0_16_i4.c: Likewise.
* generated/minloc0_16_i8.c: Likewise.
* generated/minloc0_16_r10.c: Likewise.
* generated/minloc0_16_r16.c: Likewise.
* generated/minloc0_16_r4.c: Likewise.
* generated/minloc0_16_r8.c: Likewise.
* generated/minloc0_4_i16.c: Likewise.
* generated/minloc0_4_i1.c: Likewise.
* generated/minloc0_4_i2.c: Likewise.
* generated/minloc0_4_i4.c: Likewise.
* generated/minloc0_4_i8.c: Likewise.
* generated/minloc0_4_r10.c: Likewise.
* generated/minloc0_4_r16.c: Likewise.
* generated/minloc0_4_r4.c: Likewise.
* generated/minloc0_4_r8.c: Likewise.
* generated/minloc0_8_i16.c: Likewise.
* generated/minloc0_8_i1.c: Likewise.
* generated/minloc0_8_i2.c: Likewise.
* generated/minloc0_8_i4.c: Likewise.
* generated/minloc0_8_i8.c: Likewise.
* generated/minloc0_8_r10.c: Likewise.
* generated/minloc0_8_r16.c: Likewise.
* generated/minloc0_8_r4.c: Likewise.
* generated/minloc0_8_r8.c: Likewise.
* generated/minloc1_16_i16.c: Likewise.
* generated/minloc1_16_i1.c: Likewise.
* generated/minloc1_16_i2.c: Likewise.
* generated/minloc1_16_i4.c: Likewise.
* generated/minloc1_16_i8.c: Likewise.
* generated/minloc1_16_r10.c: Likewise.
* generated/minloc1_16_r16.c: Likewise.
* generated/minloc1_16_r4.c: Likewise.
* generated/minloc1_16_r8.c: Likewise.
* generated/minloc1_4_i16.c: Likewise.
* generated/minloc1_4_i1.c: Likewise.
* generated/minloc1_4_i2.c: Likewise.
* generated/minloc1_4_i4.c: Likewise.
* generated/minloc1_4_i8.c: Likewise.
* generated/minloc1_4_r10.c: Likewise.
* generated/minloc1_4_r16.c: Likewise.
* generated/minloc1_4_r4.c: Likewise.
* generated/minloc1_4_r8.c: Likewise.
* generated/minloc1_8_i16.c: Likewise.
* generated/minloc1_8_i1.c: Likewise.
* generated/minloc1_8_i2.c: Likewise.
* generated/minloc1_8_i4.c: Likewise.
* generated/minloc1_8_i8.c: Likewise.
* generated/minloc1_8_r10.c: Likewise.
* generated/minloc1_8_r16.c: Likewise.
* generated/minloc1_8_r4.c: Likewise.
* generated/minloc1_8_r8.c: Likewise.
* generated/minval_i16.c: Likewise.
* generated/minval_i1.c: Likewise.
* generated/minval_i2.c: Likewise.
* generated/minval_i4.c: Likewise.
* generated/minval_i8.c: Likewise.
* generated/minval_r10.c: Likewise.
* generated/minval_r16.c: Likewise.
* generated/minval_r4.c: Likewise.
* generated/minval_r8.c: Likewise.
* generated/product_c10.c: Likewise.
* generated/product_c16.c: Likewise.
* generated/product_c4.c: Likewise.
* generated/product_c8.c: Likewise.
* generated/product_i16.c: Likewise.
* generated/product_i1.c: Likewise.
* generated/product_i2.c: Likewise.
* generated/product_i4.c: Likewise.
* generated/product_i8.c: Likewise.
* generated/product_r10.c: Likewise.
* generated/product_r16.c: Likewise.
* generated/product_r4.c: Likewise.
* generated/product_r8.c: Likewise.
* generated/sum_c10.c: Likewise.
* generated/sum_c16.c: Likewise.
* generated/sum_c4.c: Likewise.
* generated/sum_c8.c: Likewise.
* generated/sum_i16.c: Likewise.
* generated/sum_i1.c: Likewise.
* generated/sum_i2.c: Likewise.
* generated/sum_i4.c: Likewise.
* generated/sum_i8.c: Likewise.
* generated/sum_r10.c: Likewise.
* generated/sum_r16.c: Likewise.
* generated/sum_r4.c: Likewise.
* generated/sum_r8.c: Likewise.
* gfortran.dg/maxlocval_2.f90: New test.
* gfortran.dg/maxlocval_3.f90: New test.
* gfortran.dg/maxlocval_4.f90: New test.
* gfortran.dg/minlocval_1.f90: New test.
* gfortran.dg/minlocval_2.f90: New test.
* gfortran.dg/minlocval_3.f90: New test.
* gfortran.dg/minlocval_4.f90: New test.
From-SVN: r150041
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/maxlocval_2.f90 | 153 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/maxlocval_3.f90 | 122 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/maxlocval_4.f90 | 118 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/minlocval_1.f90 | 153 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/minlocval_2.f90 | 122 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/minlocval_3.f90 | 284 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/minlocval_4.f90 | 118 |
8 files changed, 1082 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a2ca909..671f681 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,15 @@ +2009-07-24 Jakub Jelinek <jakub@redhat.com> + + PR fortran/40643 + PR fortran/31067 + * gfortran.dg/maxlocval_2.f90: New test. + * gfortran.dg/maxlocval_3.f90: New test. + * gfortran.dg/maxlocval_4.f90: New test. + * gfortran.dg/minlocval_1.f90: New test. + * gfortran.dg/minlocval_2.f90: New test. + * gfortran.dg/minlocval_3.f90: New test. + * gfortran.dg/minlocval_4.f90: New test. + 2009-07-23 Joseph Myers <joseph@codesourcery.com> * gcc.dg/dll-4.c: Allow foo1 and foo2 in either order in diff --git a/gcc/testsuite/gfortran.dg/maxlocval_2.f90 b/gcc/testsuite/gfortran.dg/maxlocval_2.f90 new file mode 100644 index 0000000..82f917a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/maxlocval_2.f90 @@ -0,0 +1,153 @@ +! { dg-do run } + real :: a(3), nan, minf, pinf + real, allocatable :: c(:) + logical :: l + logical :: l2(3) + + nan = 0.0 + minf = 0.0 + pinf = 0.0 + nan = 0.0/nan + minf = -1.0/minf + pinf = 1.0/pinf + + allocate (c(3)) + a(:) = nan + if (maxloc (a, dim = 1).ne.1) call abort + if (.not.isnan(maxval (a, dim = 1))) call abort + a(:) = minf + if (maxloc (a, dim = 1).ne.1) call abort + if (maxval (a, dim = 1).ne.minf) call abort + a(1:2) = nan + if (maxloc (a, dim = 1).ne.3) call abort + if (maxval (a, dim = 1).ne.minf) call abort + a(2) = 1.0 + if (maxloc (a, dim = 1).ne.2) call abort + if (maxval (a, dim = 1).ne.1) call abort + a(2) = pinf + if (maxloc (a, dim = 1).ne.2) call abort + if (maxval (a, dim = 1).ne.pinf) call abort + c(:) = nan + if (maxloc (c, dim = 1).ne.1) call abort + if (.not.isnan(maxval (c, dim = 1))) call abort + c(:) = minf + if (maxloc (c, dim = 1).ne.1) call abort + if (maxval (c, dim = 1).ne.minf) call abort + c(1:2) = nan + if (maxloc (c, dim = 1).ne.3) call abort + if (maxval (c, dim = 1).ne.minf) call abort + c(2) = 1.0 + if (maxloc (c, dim = 1).ne.2) call abort + if (maxval (c, dim = 1).ne.1) call abort + c(2) = pinf + if (maxloc (c, dim = 1).ne.2) call abort + if (maxval (c, dim = 1).ne.pinf) call abort + l = .false. + l2(:) = .false. + a(:) = nan + if (maxloc (a, dim = 1, mask = l).ne.0) call abort + if (maxval (a, dim = 1, mask = l).ne.-huge(minf)) call abort + if (maxloc (a, dim = 1, mask = l2).ne.0) call abort + if (maxval (a, dim = 1, mask = l2).ne.-huge(minf)) call abort + a(:) = minf + if (maxloc (a, dim = 1, mask = l).ne.0) call abort + if (maxval (a, dim = 1, mask = l).ne.-huge(minf)) call abort + if (maxloc (a, dim = 1, mask = l2).ne.0) call abort + if (maxval (a, dim = 1, mask = l2).ne.-huge(minf)) call abort + a(1:2) = nan + if (maxloc (a, dim = 1, mask = l).ne.0) call abort + if (maxval (a, dim = 1, mask = l).ne.-huge(minf)) call abort + if (maxloc (a, dim = 1, mask = l2).ne.0) call abort + if (maxval (a, dim = 1, mask = l2).ne.-huge(minf)) call abort + a(2) = 1.0 + if (maxloc (a, dim = 1, mask = l).ne.0) call abort + if (maxval (a, dim = 1, mask = l).ne.-huge(minf)) call abort + if (maxloc (a, dim = 1, mask = l2).ne.0) call abort + if (maxval (a, dim = 1, mask = l2).ne.-huge(minf)) call abort + a(2) = pinf + if (maxloc (a, dim = 1, mask = l).ne.0) call abort + if (maxval (a, dim = 1, mask = l).ne.-huge(minf)) call abort + if (maxloc (a, dim = 1, mask = l2).ne.0) call abort + if (maxval (a, dim = 1, mask = l2).ne.-huge(minf)) call abort + c(:) = nan + if (maxloc (c, dim = 1, mask = l).ne.0) call abort + if (maxval (c, dim = 1, mask = l).ne.-huge(minf)) call abort + if (maxloc (c, dim = 1, mask = l2).ne.0) call abort + if (maxval (c, dim = 1, mask = l2).ne.-huge(minf)) call abort + c(:) = minf + if (maxloc (c, dim = 1, mask = l).ne.0) call abort + if (maxval (c, dim = 1, mask = l).ne.-huge(minf)) call abort + if (maxloc (c, dim = 1, mask = l2).ne.0) call abort + if (maxval (c, dim = 1, mask = l2).ne.-huge(minf)) call abort + c(1:2) = nan + if (maxloc (c, dim = 1, mask = l).ne.0) call abort + if (maxval (c, dim = 1, mask = l).ne.-huge(minf)) call abort + if (maxloc (c, dim = 1, mask = l2).ne.0) call abort + if (maxval (c, dim = 1, mask = l2).ne.-huge(minf)) call abort + c(2) = 1.0 + if (maxloc (c, dim = 1, mask = l).ne.0) call abort + if (maxval (c, dim = 1, mask = l).ne.-huge(minf)) call abort + if (maxloc (c, dim = 1, mask = l2).ne.0) call abort + if (maxval (c, dim = 1, mask = l2).ne.-huge(minf)) call abort + c(2) = pinf + if (maxloc (c, dim = 1, mask = l).ne.0) call abort + if (maxval (c, dim = 1, mask = l).ne.-huge(minf)) call abort + if (maxloc (c, dim = 1, mask = l2).ne.0) call abort + if (maxval (c, dim = 1, mask = l2).ne.-huge(minf)) call abort + l = .true. + l2(:) = .true. + a(:) = nan + if (maxloc (a, dim = 1, mask = l).ne.1) call abort + if (.not.isnan(maxval (a, dim = 1, mask = l))) call abort + if (maxloc (a, dim = 1, mask = l2).ne.1) call abort + if (.not.isnan(maxval (a, dim = 1, mask = l2))) call abort + a(:) = minf + if (maxloc (a, dim = 1, mask = l).ne.1) call abort + if (maxval (a, dim = 1, mask = l).ne.minf) call abort + if (maxloc (a, dim = 1, mask = l2).ne.1) call abort + if (maxval (a, dim = 1, mask = l2).ne.minf) call abort + a(1:2) = nan + if (maxloc (a, dim = 1, mask = l).ne.3) call abort + if (maxval (a, dim = 1, mask = l).ne.minf) call abort + if (maxloc (a, dim = 1, mask = l2).ne.3) call abort + if (maxval (a, dim = 1, mask = l2).ne.minf) call abort + a(2) = 1.0 + if (maxloc (a, dim = 1, mask = l).ne.2) call abort + if (maxval (a, dim = 1, mask = l).ne.1) call abort + if (maxloc (a, dim = 1, mask = l2).ne.2) call abort + if (maxval (a, dim = 1, mask = l2).ne.1) call abort + a(2) = pinf + if (maxloc (a, dim = 1, mask = l).ne.2) call abort + if (maxval (a, dim = 1, mask = l).ne.pinf) call abort + if (maxloc (a, dim = 1, mask = l2).ne.2) call abort + if (maxval (a, dim = 1, mask = l2).ne.pinf) call abort + c(:) = nan + if (maxloc (c, dim = 1, mask = l).ne.1) call abort + if (.not.isnan(maxval (c, dim = 1, mask = l))) call abort + if (maxloc (c, dim = 1, mask = l2).ne.1) call abort + if (.not.isnan(maxval (c, dim = 1, mask = l2))) call abort + c(:) = minf + if (maxloc (c, dim = 1, mask = l).ne.1) call abort + if (maxval (c, dim = 1, mask = l).ne.minf) call abort + if (maxloc (c, dim = 1, mask = l2).ne.1) call abort + if (maxval (c, dim = 1, mask = l2).ne.minf) call abort + c(1:2) = nan + if (maxloc (c, dim = 1, mask = l).ne.3) call abort + if (maxval (c, dim = 1, mask = l).ne.minf) call abort + if (maxloc (c, dim = 1, mask = l2).ne.3) call abort + if (maxval (c, dim = 1, mask = l2).ne.minf) call abort + c(2) = 1.0 + if (maxloc (c, dim = 1, mask = l).ne.2) call abort + if (maxval (c, dim = 1, mask = l).ne.1) call abort + if (maxloc (c, dim = 1, mask = l2).ne.2) call abort + if (maxval (c, dim = 1, mask = l2).ne.1) call abort + c(2) = pinf + if (maxloc (c, dim = 1, mask = l).ne.2) call abort + if (maxval (c, dim = 1, mask = l).ne.pinf) call abort + if (maxloc (c, dim = 1, mask = l2).ne.2) call abort + if (maxval (c, dim = 1, mask = l2).ne.pinf) call abort + deallocate (c) + allocate (c(-2:-3)) + if (maxloc (c, dim = 1).ne.0) call abort + if (maxval (c, dim = 1).ne.-huge(minf)) call abort +end diff --git a/gcc/testsuite/gfortran.dg/maxlocval_3.f90 b/gcc/testsuite/gfortran.dg/maxlocval_3.f90 new file mode 100644 index 0000000..cbd3595 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/maxlocval_3.f90 @@ -0,0 +1,122 @@ +! { dg-do run } + integer :: a(3), h + integer, allocatable :: c(:) + logical :: l + logical :: l2(3) + + h = -huge(h) + h = h - 1 + allocate (c(3)) + a(:) = 5 + if (maxloc (a, dim = 1).ne.1) call abort + if (maxval (a, dim = 1).ne.5) call abort + a(2) = huge(h) + if (maxloc (a, dim = 1).ne.2) call abort + if (maxval (a, dim = 1).ne.huge(h)) call abort + a(:) = h + if (maxloc (a, dim = 1).ne.1) call abort + if (maxval (a, dim = 1).ne.h) call abort + a(3) = -huge(h) + if (maxloc (a, dim = 1).ne.3) call abort + if (maxval (a, dim = 1).ne.-huge(h)) call abort + c(:) = 5 + if (maxloc (c, dim = 1).ne.1) call abort + if (maxval (c, dim = 1).ne.5) call abort + c(2) = huge(h) + if (maxloc (c, dim = 1).ne.2) call abort + if (maxval (c, dim = 1).ne.huge(h)) call abort + c(:) = h + if (maxloc (c, dim = 1).ne.1) call abort + if (maxval (c, dim = 1).ne.h) call abort + c(3) = -huge(h) + if (maxloc (c, dim = 1).ne.3) call abort + if (maxval (c, dim = 1).ne.-huge(h)) call abort + l = .false. + l2(:) = .false. + a(:) = 5 + if (maxloc (a, dim = 1, mask = l).ne.0) call abort + if (maxval (a, dim = 1, mask = l).ne.h) call abort + if (maxloc (a, dim = 1, mask = l2).ne.0) call abort + if (maxval (a, dim = 1, mask = l2).ne.h) call abort + a(2) = huge(h) + if (maxloc (a, dim = 1, mask = l).ne.0) call abort + if (maxval (a, dim = 1, mask = l).ne.h) call abort + if (maxloc (a, dim = 1, mask = l2).ne.0) call abort + if (maxval (a, dim = 1, mask = l2).ne.h) call abort + a(:) = h + if (maxloc (a, dim = 1, mask = l).ne.0) call abort + if (maxval (a, dim = 1, mask = l).ne.h) call abort + if (maxloc (a, dim = 1, mask = l2).ne.0) call abort + if (maxval (a, dim = 1, mask = l2).ne.h) call abort + a(3) = -huge(h) + if (maxloc (a, dim = 1, mask = l).ne.0) call abort + if (maxval (a, dim = 1, mask = l).ne.h) call abort + if (maxloc (a, dim = 1, mask = l2).ne.0) call abort + if (maxval (a, dim = 1, mask = l2).ne.h) call abort + c(:) = 5 + if (maxloc (c, dim = 1, mask = l).ne.0) call abort + if (maxval (c, dim = 1, mask = l).ne.h) call abort + if (maxloc (c, dim = 1, mask = l2).ne.0) call abort + if (maxval (c, dim = 1, mask = l2).ne.h) call abort + c(2) = huge(h) + if (maxloc (c, dim = 1, mask = l).ne.0) call abort + if (maxval (c, dim = 1, mask = l).ne.h) call abort + if (maxloc (c, dim = 1, mask = l2).ne.0) call abort + if (maxval (c, dim = 1, mask = l2).ne.h) call abort + c(:) = h + if (maxloc (c, dim = 1, mask = l).ne.0) call abort + if (maxval (c, dim = 1, mask = l).ne.h) call abort + if (maxloc (c, dim = 1, mask = l2).ne.0) call abort + if (maxval (c, dim = 1, mask = l2).ne.h) call abort + c(3) = -huge(h) + if (maxloc (c, dim = 1, mask = l).ne.0) call abort + if (maxval (c, dim = 1, mask = l).ne.h) call abort + if (maxloc (c, dim = 1, mask = l2).ne.0) call abort + if (maxval (c, dim = 1, mask = l2).ne.h) call abort + l = .true. + l2(:) = .true. + a(:) = 5 + if (maxloc (a, dim = 1, mask = l).ne.1) call abort + if (maxval (a, dim = 1, mask = l).ne.5) call abort + if (maxloc (a, dim = 1, mask = l2).ne.1) call abort + if (maxval (a, dim = 1, mask = l2).ne.5) call abort + a(2) = huge(h) + if (maxloc (a, dim = 1, mask = l).ne.2) call abort + if (maxval (a, dim = 1, mask = l).ne.huge(h)) call abort + if (maxloc (a, dim = 1, mask = l2).ne.2) call abort + if (maxval (a, dim = 1, mask = l2).ne.huge(h)) call abort + a(:) = h + if (maxloc (a, dim = 1, mask = l).ne.1) call abort + if (maxval (a, dim = 1, mask = l).ne.h) call abort + if (maxloc (a, dim = 1, mask = l2).ne.1) call abort + if (maxval (a, dim = 1, mask = l2).ne.h) call abort + a(3) = -huge(h) + if (maxloc (a, dim = 1, mask = l).ne.3) call abort + if (maxval (a, dim = 1, mask = l).ne.-huge(h)) call abort + if (maxloc (a, dim = 1, mask = l2).ne.3) call abort + if (maxval (a, dim = 1, mask = l2).ne.-huge(h)) call abort + c(:) = 5 + if (maxloc (c, dim = 1, mask = l).ne.1) call abort + if (maxval (c, dim = 1, mask = l).ne.5) call abort + if (maxloc (c, dim = 1, mask = l2).ne.1) call abort + if (maxval (c, dim = 1, mask = l2).ne.5) call abort + c(2) = huge(h) + if (maxloc (c, dim = 1, mask = l).ne.2) call abort + if (maxval (c, dim = 1, mask = l).ne.huge(h)) call abort + if (maxloc (c, dim = 1, mask = l2).ne.2) call abort + if (maxval (c, dim = 1, mask = l2).ne.huge(h)) call abort + c(:) = h + if (maxloc (c, dim = 1, mask = l).ne.1) call abort + if (maxval (c, dim = 1, mask = l).ne.h) call abort + if (maxloc (c, dim = 1, mask = l2).ne.1) call abort + if (maxval (c, dim = 1, mask = l2).ne.h) call abort + c(3) = -huge(h) + if (maxloc (c, dim = 1, mask = l).ne.3) call abort + if (maxval (c, dim = 1, mask = l).ne.-huge(h)) call abort + if (maxloc (c, dim = 1, mask = l2).ne.3) call abort + if (maxval (c, dim = 1, mask = l2).ne.-huge(h)) call abort + deallocate (c) + allocate (c(-2:-3)) + if (maxloc (c, dim = 1).ne.0) call abort + if (maxval (c, dim = 1).ne.h) call abort +end diff --git a/gcc/testsuite/gfortran.dg/maxlocval_4.f90 b/gcc/testsuite/gfortran.dg/maxlocval_4.f90 new file mode 100644 index 0000000..408b08d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/maxlocval_4.f90 @@ -0,0 +1,118 @@ +! { dg-do run } + real :: a(3,3), b(3), nan, minf, pinf, h + logical :: l, l2 + logical :: l3(3,3), l4(3,3), l5(3,3) + + nan = 0.0 + minf = 0.0 + pinf = 0.0 + nan = 0.0/nan + minf = -1.0/minf + pinf = 1.0/pinf + h = -huge(h) + l = .false. + l2 = .true. + l3 = .false. + l4 = .true. + l5 = .true. + l5(1,1) = .false. + l5(1,2) = .false. + l5(2,3) = .false. + a = reshape ((/ nan, nan, nan, minf, minf, minf, minf, pinf, minf /), (/ 3, 3 /)) + if (maxval (a).ne.pinf) call abort + if (any (maxloc (a).ne.(/ 2, 3 /))) call abort + b = maxval (a, dim = 1) + if (.not.isnan(b(1))) call abort + b(1) = 0.0 + if (any (b.ne.(/ 0.0, minf, pinf /))) call abort + if (any (maxloc (a, dim = 1).ne.(/ 1, 1, 2 /))) call abort + b = maxval (a, dim = 2) + if (any (b.ne.(/ minf, pinf, minf /))) call abort + if (any (maxloc (a, dim = 2).ne.(/ 2, 3, 2 /))) call abort + if (maxval (a, mask = l).ne.h) call abort + if (any (maxloc (a, mask = l).ne.(/ 0, 0 /))) call abort + b = maxval (a, dim = 1, mask = l) + if (any (b.ne.(/ h, h, h /))) call abort + if (any (maxloc (a, dim = 1, mask = l).ne.(/ 0, 0, 0 /))) call abort + b = maxval (a, dim = 2, mask = l) + if (any (b.ne.(/ h, h, h /))) call abort + if (any (maxloc (a, dim = 2, mask = l).ne.(/ 0, 0, 0 /))) call abort + if (maxval (a, mask = l3).ne.h) call abort + if (any (maxloc (a, mask = l3).ne.(/ 0, 0 /))) call abort + b = maxval (a, dim = 1, mask = l3) + if (any (b.ne.(/ h, h, h /))) call abort + if (any (maxloc (a, dim = 1, mask = l3).ne.(/ 0, 0, 0 /))) call abort + b = maxval (a, dim = 2, mask = l3) + if (any (b.ne.(/ h, h, h /))) call abort + if (any (maxloc (a, dim = 2, mask = l3).ne.(/ 0, 0, 0 /))) call abort + if (maxval (a, mask = l2).ne.pinf) call abort + if (maxval (a, mask = l4).ne.pinf) call abort + if (any (maxloc (a, mask = l2).ne.(/ 2, 3 /))) call abort + if (any (maxloc (a, mask = l4).ne.(/ 2, 3 /))) call abort + b = maxval (a, dim = 1, mask = l2) + if (.not.isnan(b(1))) call abort + b(1) = 0.0 + if (any (b.ne.(/ 0.0, minf, pinf /))) call abort + if (any (maxloc (a, dim = 1, mask = l2).ne.(/ 1, 1, 2 /))) call abort + b = maxval (a, dim = 2, mask = l2) + if (any (b.ne.(/ minf, pinf, minf /))) call abort + if (any (maxloc (a, dim = 2, mask = l2).ne.(/ 2, 3, 2 /))) call abort + b = maxval (a, dim = 1, mask = l4) + if (.not.isnan(b(1))) call abort + b(1) = 0.0 + if (any (b.ne.(/ 0.0, minf, pinf /))) call abort + if (any (maxloc (a, dim = 1, mask = l2).ne.(/ 1, 1, 2 /))) call abort + b = maxval (a, dim = 2, mask = l4) + if (any (b.ne.(/ minf, pinf, minf /))) call abort + if (any (maxloc (a, dim = 2, mask = l2).ne.(/ 2, 3, 2 /))) call abort + if (maxval (a, mask = l5).ne.minf) call abort + if (any (maxloc (a, mask = l5).ne.(/ 2, 2 /))) call abort + b = maxval (a, dim = 1, mask = l5) + if (.not.isnan(b(1))) call abort + b(1) = 0.0 + if (any (b.ne.(/ 0.0, minf, minf /))) call abort + if (any (maxloc (a, dim = 1, mask = l5).ne.(/ 2, 2, 1 /))) call abort + b = maxval (a, dim = 2, mask = l5) + if (any (b.ne.(/ minf, minf, minf /))) call abort + if (any (maxloc (a, dim = 2, mask = l5).ne.(/ 3, 2, 2 /))) call abort + a = nan + if (.not.isnan(maxval (a))) call abort + if (maxval (a, mask = l).ne.h) call abort + if (.not.isnan(maxval (a, mask = l2))) call abort + if (maxval (a, mask = l3).ne.h) call abort + if (.not.isnan(maxval (a, mask = l4))) call abort + if (.not.isnan(maxval (a, mask = l5))) call abort + if (any (maxloc (a).ne.(/ 1, 1 /))) call abort + if (any (maxloc (a, mask = l).ne.(/ 0, 0 /))) call abort + if (any (maxloc (a, mask = l2).ne.(/ 1, 1 /))) call abort + if (any (maxloc (a, mask = l3).ne.(/ 0, 0 /))) call abort + if (any (maxloc (a, mask = l4).ne.(/ 1, 1 /))) call abort + if (any (maxloc (a, mask = l5).ne.(/ 2, 1 /))) call abort + a = minf + if (maxval (a).ne.minf) call abort + if (maxval (a, mask = l).ne.h) call abort + if (maxval (a, mask = l2).ne.minf) call abort + if (maxval (a, mask = l3).ne.h) call abort + if (maxval (a, mask = l4).ne.minf) call abort + if (maxval (a, mask = l5).ne.minf) call abort + if (any (maxloc (a).ne.(/ 1, 1 /))) call abort + if (any (maxloc (a, mask = l).ne.(/ 0, 0 /))) call abort + if (any (maxloc (a, mask = l2).ne.(/ 1, 1 /))) call abort + if (any (maxloc (a, mask = l3).ne.(/ 0, 0 /))) call abort + if (any (maxloc (a, mask = l4).ne.(/ 1, 1 /))) call abort + if (any (maxloc (a, mask = l5).ne.(/ 2, 1 /))) call abort + a = nan + a(1,3) = minf + if (maxval (a).ne.minf) call abort + if (maxval (a, mask = l).ne.h) call abort + if (maxval (a, mask = l2).ne.minf) call abort + if (maxval (a, mask = l3).ne.h) call abort + if (maxval (a, mask = l4).ne.minf) call abort + if (maxval (a, mask = l5).ne.minf) call abort + if (any (maxloc (a).ne.(/ 1, 3 /))) call abort + if (any (maxloc (a, mask = l).ne.(/ 0, 0 /))) call abort + if (any (maxloc (a, mask = l2).ne.(/ 1, 3 /))) call abort + if (any (maxloc (a, mask = l3).ne.(/ 0, 0 /))) call abort + if (any (maxloc (a, mask = l4).ne.(/ 1, 3 /))) call abort + if (any (maxloc (a, mask = l5).ne.(/ 1, 3 /))) call abort +end diff --git a/gcc/testsuite/gfortran.dg/minlocval_1.f90 b/gcc/testsuite/gfortran.dg/minlocval_1.f90 new file mode 100644 index 0000000..f821e54 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/minlocval_1.f90 @@ -0,0 +1,153 @@ +! { dg-do run } + real :: a(3), nan, minf, pinf + real, allocatable :: c(:) + logical :: l + logical :: l2(3) + + nan = 0.0 + minf = 0.0 + pinf = 0.0 + nan = 0.0/nan + minf = -1.0/minf + pinf = 1.0/pinf + + allocate (c(3)) + a(:) = nan + if (minloc (a, dim = 1).ne.1) call abort + if (.not.isnan(minval (a, dim = 1))) call abort + a(:) = pinf + if (minloc (a, dim = 1).ne.1) call abort + if (minval (a, dim = 1).ne.pinf) call abort + a(1:2) = nan + if (minloc (a, dim = 1).ne.3) call abort + if (minval (a, dim = 1).ne.pinf) call abort + a(2) = 1.0 + if (minloc (a, dim = 1).ne.2) call abort + if (minval (a, dim = 1).ne.1) call abort + a(2) = minf + if (minloc (a, dim = 1).ne.2) call abort + if (minval (a, dim = 1).ne.minf) call abort + c(:) = nan + if (minloc (c, dim = 1).ne.1) call abort + if (.not.isnan(minval (c, dim = 1))) call abort + c(:) = pinf + if (minloc (c, dim = 1).ne.1) call abort + if (minval (c, dim = 1).ne.pinf) call abort + c(1:2) = nan + if (minloc (c, dim = 1).ne.3) call abort + if (minval (c, dim = 1).ne.pinf) call abort + c(2) = 1.0 + if (minloc (c, dim = 1).ne.2) call abort + if (minval (c, dim = 1).ne.1) call abort + c(2) = minf + if (minloc (c, dim = 1).ne.2) call abort + if (minval (c, dim = 1).ne.minf) call abort + l = .false. + l2(:) = .false. + a(:) = nan + if (minloc (a, dim = 1, mask = l).ne.0) call abort + if (minval (a, dim = 1, mask = l).ne.huge(pinf)) call abort + if (minloc (a, dim = 1, mask = l2).ne.0) call abort + if (minval (a, dim = 1, mask = l2).ne.huge(pinf)) call abort + a(:) = pinf + if (minloc (a, dim = 1, mask = l).ne.0) call abort + if (minval (a, dim = 1, mask = l).ne.huge(pinf)) call abort + if (minloc (a, dim = 1, mask = l2).ne.0) call abort + if (minval (a, dim = 1, mask = l2).ne.huge(pinf)) call abort + a(1:2) = nan + if (minloc (a, dim = 1, mask = l).ne.0) call abort + if (minval (a, dim = 1, mask = l).ne.huge(pinf)) call abort + if (minloc (a, dim = 1, mask = l2).ne.0) call abort + if (minval (a, dim = 1, mask = l2).ne.huge(pinf)) call abort + a(2) = 1.0 + if (minloc (a, dim = 1, mask = l).ne.0) call abort + if (minval (a, dim = 1, mask = l).ne.huge(pinf)) call abort + if (minloc (a, dim = 1, mask = l2).ne.0) call abort + if (minval (a, dim = 1, mask = l2).ne.huge(pinf)) call abort + a(2) = minf + if (minloc (a, dim = 1, mask = l).ne.0) call abort + if (minval (a, dim = 1, mask = l).ne.huge(pinf)) call abort + if (minloc (a, dim = 1, mask = l2).ne.0) call abort + if (minval (a, dim = 1, mask = l2).ne.huge(pinf)) call abort + c(:) = nan + if (minloc (c, dim = 1, mask = l).ne.0) call abort + if (minval (c, dim = 1, mask = l).ne.huge(pinf)) call abort + if (minloc (c, dim = 1, mask = l2).ne.0) call abort + if (minval (c, dim = 1, mask = l2).ne.huge(pinf)) call abort + c(:) = pinf + if (minloc (c, dim = 1, mask = l).ne.0) call abort + if (minval (c, dim = 1, mask = l).ne.huge(pinf)) call abort + if (minloc (c, dim = 1, mask = l2).ne.0) call abort + if (minval (c, dim = 1, mask = l2).ne.huge(pinf)) call abort + c(1:2) = nan + if (minloc (c, dim = 1, mask = l).ne.0) call abort + if (minval (c, dim = 1, mask = l).ne.huge(pinf)) call abort + if (minloc (c, dim = 1, mask = l2).ne.0) call abort + if (minval (c, dim = 1, mask = l2).ne.huge(pinf)) call abort + c(2) = 1.0 + if (minloc (c, dim = 1, mask = l).ne.0) call abort + if (minval (c, dim = 1, mask = l).ne.huge(pinf)) call abort + if (minloc (c, dim = 1, mask = l2).ne.0) call abort + if (minval (c, dim = 1, mask = l2).ne.huge(pinf)) call abort + c(2) = minf + if (minloc (c, dim = 1, mask = l).ne.0) call abort + if (minval (c, dim = 1, mask = l).ne.huge(pinf)) call abort + if (minloc (c, dim = 1, mask = l2).ne.0) call abort + if (minval (c, dim = 1, mask = l2).ne.huge(pinf)) call abort + l = .true. + l2(:) = .true. + a(:) = nan + if (minloc (a, dim = 1, mask = l).ne.1) call abort + if (.not.isnan(minval (a, dim = 1, mask = l))) call abort + if (minloc (a, dim = 1, mask = l2).ne.1) call abort + if (.not.isnan(minval (a, dim = 1, mask = l2))) call abort + a(:) = pinf + if (minloc (a, dim = 1, mask = l).ne.1) call abort + if (minval (a, dim = 1, mask = l).ne.pinf) call abort + if (minloc (a, dim = 1, mask = l2).ne.1) call abort + if (minval (a, dim = 1, mask = l2).ne.pinf) call abort + a(1:2) = nan + if (minloc (a, dim = 1, mask = l).ne.3) call abort + if (minval (a, dim = 1, mask = l).ne.pinf) call abort + if (minloc (a, dim = 1, mask = l2).ne.3) call abort + if (minval (a, dim = 1, mask = l2).ne.pinf) call abort + a(2) = 1.0 + if (minloc (a, dim = 1, mask = l).ne.2) call abort + if (minval (a, dim = 1, mask = l).ne.1) call abort + if (minloc (a, dim = 1, mask = l2).ne.2) call abort + if (minval (a, dim = 1, mask = l2).ne.1) call abort + a(2) = minf + if (minloc (a, dim = 1, mask = l).ne.2) call abort + if (minval (a, dim = 1, mask = l).ne.minf) call abort + if (minloc (a, dim = 1, mask = l2).ne.2) call abort + if (minval (a, dim = 1, mask = l2).ne.minf) call abort + c(:) = nan + if (minloc (c, dim = 1, mask = l).ne.1) call abort + if (.not.isnan(minval (c, dim = 1, mask = l))) call abort + if (minloc (c, dim = 1, mask = l2).ne.1) call abort + if (.not.isnan(minval (c, dim = 1, mask = l2))) call abort + c(:) = pinf + if (minloc (c, dim = 1, mask = l).ne.1) call abort + if (minval (c, dim = 1, mask = l).ne.pinf) call abort + if (minloc (c, dim = 1, mask = l2).ne.1) call abort + if (minval (c, dim = 1, mask = l2).ne.pinf) call abort + c(1:2) = nan + if (minloc (c, dim = 1, mask = l).ne.3) call abort + if (minval (c, dim = 1, mask = l).ne.pinf) call abort + if (minloc (c, dim = 1, mask = l2).ne.3) call abort + if (minval (c, dim = 1, mask = l2).ne.pinf) call abort + c(2) = 1.0 + if (minloc (c, dim = 1, mask = l).ne.2) call abort + if (minval (c, dim = 1, mask = l).ne.1) call abort + if (minloc (c, dim = 1, mask = l2).ne.2) call abort + if (minval (c, dim = 1, mask = l2).ne.1) call abort + c(2) = minf + if (minloc (c, dim = 1, mask = l).ne.2) call abort + if (minval (c, dim = 1, mask = l).ne.minf) call abort + if (minloc (c, dim = 1, mask = l2).ne.2) call abort + if (minval (c, dim = 1, mask = l2).ne.minf) call abort + deallocate (c) + allocate (c(-2:-3)) + if (minloc (c, dim = 1).ne.0) call abort + if (minval (c, dim = 1).ne.huge(pinf)) call abort +end diff --git a/gcc/testsuite/gfortran.dg/minlocval_2.f90 b/gcc/testsuite/gfortran.dg/minlocval_2.f90 new file mode 100644 index 0000000..8e04dc6 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/minlocval_2.f90 @@ -0,0 +1,122 @@ +! { dg-do run } + integer :: a(3), h + integer, allocatable :: c(:) + logical :: l + logical :: l2(3) + + h = -huge(h) + h = h - 1 + allocate (c(3)) + a(:) = 5 + if (minloc (a, dim = 1).ne.1) call abort + if (minval (a, dim = 1).ne.5) call abort + a(2) = h + if (minloc (a, dim = 1).ne.2) call abort + if (minval (a, dim = 1).ne.h) call abort + a(:) = huge(h) + if (minloc (a, dim = 1).ne.1) call abort + if (minval (a, dim = 1).ne.huge(h)) call abort + a(3) = huge(h) - 1 + if (minloc (a, dim = 1).ne.3) call abort + if (minval (a, dim = 1).ne.huge(h)-1) call abort + c(:) = 5 + if (minloc (c, dim = 1).ne.1) call abort + if (minval (c, dim = 1).ne.5) call abort + c(2) = h + if (minloc (c, dim = 1).ne.2) call abort + if (minval (c, dim = 1).ne.h) call abort + c(:) = huge(h) + if (minloc (c, dim = 1).ne.1) call abort + if (minval (c, dim = 1).ne.huge(h)) call abort + c(3) = huge(h) - 1 + if (minloc (c, dim = 1).ne.3) call abort + if (minval (c, dim = 1).ne.huge(h)-1) call abort + l = .false. + l2(:) = .false. + a(:) = 5 + if (minloc (a, dim = 1, mask = l).ne.0) call abort + if (minval (a, dim = 1, mask = l).ne.huge(h)) call abort + if (minloc (a, dim = 1, mask = l2).ne.0) call abort + if (minval (a, dim = 1, mask = l2).ne.huge(h)) call abort + a(2) = h + if (minloc (a, dim = 1, mask = l).ne.0) call abort + if (minval (a, dim = 1, mask = l).ne.huge(h)) call abort + if (minloc (a, dim = 1, mask = l2).ne.0) call abort + if (minval (a, dim = 1, mask = l2).ne.huge(h)) call abort + a(:) = huge(h) + if (minloc (a, dim = 1, mask = l).ne.0) call abort + if (minval (a, dim = 1, mask = l).ne.huge(h)) call abort + if (minloc (a, dim = 1, mask = l2).ne.0) call abort + if (minval (a, dim = 1, mask = l2).ne.huge(h)) call abort + a(3) = huge(h) - 1 + if (minloc (a, dim = 1, mask = l).ne.0) call abort + if (minval (a, dim = 1, mask = l).ne.huge(h)) call abort + if (minloc (a, dim = 1, mask = l2).ne.0) call abort + if (minval (a, dim = 1, mask = l2).ne.huge(h)) call abort + c(:) = 5 + if (minloc (c, dim = 1, mask = l).ne.0) call abort + if (minval (c, dim = 1, mask = l).ne.huge(h)) call abort + if (minloc (c, dim = 1, mask = l2).ne.0) call abort + if (minval (c, dim = 1, mask = l2).ne.huge(h)) call abort + c(2) = h + if (minloc (c, dim = 1, mask = l).ne.0) call abort + if (minval (c, dim = 1, mask = l).ne.huge(h)) call abort + if (minloc (c, dim = 1, mask = l2).ne.0) call abort + if (minval (c, dim = 1, mask = l2).ne.huge(h)) call abort + c(:) = huge(h) + if (minloc (c, dim = 1, mask = l).ne.0) call abort + if (minval (c, dim = 1, mask = l).ne.huge(h)) call abort + if (minloc (c, dim = 1, mask = l2).ne.0) call abort + if (minval (c, dim = 1, mask = l2).ne.huge(h)) call abort + c(3) = huge(h) - 1 + if (minloc (c, dim = 1, mask = l).ne.0) call abort + if (minval (c, dim = 1, mask = l).ne.huge(h)) call abort + if (minloc (c, dim = 1, mask = l2).ne.0) call abort + if (minval (c, dim = 1, mask = l2).ne.huge(h)) call abort + l = .true. + l2(:) = .true. + a(:) = 5 + if (minloc (a, dim = 1, mask = l).ne.1) call abort + if (minval (a, dim = 1, mask = l).ne.5) call abort + if (minloc (a, dim = 1, mask = l2).ne.1) call abort + if (minval (a, dim = 1, mask = l2).ne.5) call abort + a(2) = h + if (minloc (a, dim = 1, mask = l).ne.2) call abort + if (minval (a, dim = 1, mask = l).ne.h) call abort + if (minloc (a, dim = 1, mask = l2).ne.2) call abort + if (minval (a, dim = 1, mask = l2).ne.h) call abort + a(:) = huge(h) + if (minloc (a, dim = 1, mask = l).ne.1) call abort + if (minval (a, dim = 1, mask = l).ne.huge(h)) call abort + if (minloc (a, dim = 1, mask = l2).ne.1) call abort + if (minval (a, dim = 1, mask = l2).ne.huge(h)) call abort + a(3) = huge(h) - 1 + if (minloc (a, dim = 1, mask = l).ne.3) call abort + if (minval (a, dim = 1, mask = l).ne.huge(h)-1) call abort + if (minloc (a, dim = 1, mask = l2).ne.3) call abort + if (minval (a, dim = 1, mask = l2).ne.huge(h)-1) call abort + c(:) = 5 + if (minloc (c, dim = 1, mask = l).ne.1) call abort + if (minval (c, dim = 1, mask = l).ne.5) call abort + if (minloc (c, dim = 1, mask = l2).ne.1) call abort + if (minval (c, dim = 1, mask = l2).ne.5) call abort + c(2) = h + if (minloc (c, dim = 1, mask = l).ne.2) call abort + if (minval (c, dim = 1, mask = l).ne.h) call abort + if (minloc (c, dim = 1, mask = l2).ne.2) call abort + if (minval (c, dim = 1, mask = l2).ne.h) call abort + c(:) = huge(h) + if (minloc (c, dim = 1, mask = l).ne.1) call abort + if (minval (c, dim = 1, mask = l).ne.huge(h)) call abort + if (minloc (c, dim = 1, mask = l2).ne.1) call abort + if (minval (c, dim = 1, mask = l2).ne.huge(h)) call abort + c(3) = huge(h) - 1 + if (minloc (c, dim = 1, mask = l).ne.3) call abort + if (minval (c, dim = 1, mask = l).ne.huge(h)-1) call abort + if (minloc (c, dim = 1, mask = l2).ne.3) call abort + if (minval (c, dim = 1, mask = l2).ne.huge(h)-1) call abort + deallocate (c) + allocate (c(-2:-3)) + if (minloc (c, dim = 1).ne.0) call abort + if (minval (c, dim = 1).ne.huge(h)) call abort +end diff --git a/gcc/testsuite/gfortran.dg/minlocval_3.f90 b/gcc/testsuite/gfortran.dg/minlocval_3.f90 new file mode 100644 index 0000000..6a4fc55 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/minlocval_3.f90 @@ -0,0 +1,284 @@ + real :: a(30), b(10, 10), m + real, allocatable :: c(:), d(:, :) + integer :: e(30), f(10, 10), n + integer, allocatable :: g(:), h(:,:) + logical :: l(30), l2(10, 10) + allocate (c (30)) + allocate (d (10, 10)) + allocate (g (30)) + allocate (h (10, 10)) + a = 7.0 + b = 7.0 + c = 7.0 + d = 7.0 + e = 7 + f = 7 + g = 7 + h = 7 + m = huge(m) + n = huge(n) + a(7) = 6.0 + b(5, 5) = 6.0 + b(5, 6) = 5.0 + b(6, 7) = 4.0 + c(7) = 6.0 + d(5, 5) = 6.0 + d(5, 6) = 5.0 + d(6, 7) = 4.0 + e(7) = 6 + f(5, 5) = 6 + f(5, 6) = 5 + f(6, 7) = 4 + g(7) = 6 + h(5, 5) = 6 + h(5, 6) = 5 + h(6, 7) = 4 + if (minloc (a, dim = 1).ne.7) call abort + if (minval (a, dim = 1).ne.6.0) call abort + if (minloc (a(::2), dim = 1).ne.4) call abort + if (minval (a(::2), dim = 1).ne.6.0) call abort + if (any (minloc (a).ne.(/ 7 /))) call abort + if (minval (a).ne.6.0) call abort + if (any (minloc (a(::2)).ne.(/ 4 /))) call abort + if (minval (a(::2)).ne.6.0) call abort + if (any (minloc (b, dim = 1).ne.(/ 1, 1, 1, 1, 5, 5, 6, 1, 1, 1 /))) call abort + if (any (minval (b, dim = 1).ne.(/ 7.0, 7.0, 7.0, 7.0, 6.0, 5.0, 4.0, 7.0, 7.0, 7.0 /))) call abort + if (any (minloc (b(::2,::2), dim = 1).ne.(/ 1, 1, 3, 1, 1 /))) call abort + if (any (minval (b(::2,::2), dim = 1).ne.(/ 7.0, 7.0, 6.0, 7.0, 7.0 /))) call abort + if (any (minloc (b, dim = 2).ne.(/ 1, 1, 1, 1, 6, 7, 1, 1, 1, 1 /))) call abort + if (any (minval (b, dim = 2).ne.(/ 7.0, 7.0, 7.0, 7.0, 5.0, 4.0, 7.0, 7.0, 7.0, 7.0 /))) call abort + if (any (minloc (b(::2,::2), dim = 2).ne.(/ 1, 1, 3, 1, 1 /))) call abort + if (any (minval (b(::2,::2), dim = 2).ne.(/ 7.0, 7.0, 6.0, 7.0, 7.0 /))) call abort + if (any (minloc (b).ne.(/ 6, 7 /))) call abort + if (minval (b).ne.4.0) call abort + if (any (minloc (b(::2,::2)).ne.(/ 3, 3 /))) call abort + if (minval (b(::2,::2)).ne.6.0) call abort + if (minloc (c, dim = 1).ne.7) call abort + if (minval (c, dim = 1).ne.6.0) call abort + if (minloc (c(::2), dim = 1).ne.4) call abort + if (minval (c(::2), dim = 1).ne.6.0) call abort + if (any (minloc (c).ne.(/ 7 /))) call abort + if (minval (c).ne.6.0) call abort + if (any (minloc (c(::2)).ne.(/ 4 /))) call abort + if (minval (c(::2)).ne.6.0) call abort + if (any (minloc (d, dim = 1).ne.(/ 1, 1, 1, 1, 5, 5, 6, 1, 1, 1 /))) call abort + if (any (minval (d, dim = 1).ne.(/ 7.0, 7.0, 7.0, 7.0, 6.0, 5.0, 4.0, 7.0, 7.0, 7.0 /))) call abort + if (any (minloc (d(::2,::2), dim = 1).ne.(/ 1, 1, 3, 1, 1 /))) call abort + if (any (minval (d(::2,::2), dim = 1).ne.(/ 7.0, 7.0, 6.0, 7.0, 7.0 /))) call abort + if (any (minloc (d, dim = 2).ne.(/ 1, 1, 1, 1, 6, 7, 1, 1, 1, 1 /))) call abort + if (any (minval (d, dim = 2).ne.(/ 7.0, 7.0, 7.0, 7.0, 5.0, 4.0, 7.0, 7.0, 7.0, 7.0 /))) call abort + if (any (minloc (d(::2,::2), dim = 2).ne.(/ 1, 1, 3, 1, 1 /))) call abort + if (any (minval (d(::2,::2), dim = 2).ne.(/ 7.0, 7.0, 6.0, 7.0, 7.0 /))) call abort + if (any (minloc (d).ne.(/ 6, 7 /))) call abort + if (minval (d).ne.4.0) call abort + if (any (minloc (d(::2,::2)).ne.(/ 3, 3 /))) call abort + if (minval (d(::2,::2)).ne.6.0) call abort + if (minloc (e, dim = 1).ne.7) call abort + if (minval (e, dim = 1).ne.6) call abort + if (minloc (e(::2), dim = 1).ne.4) call abort + if (minval (e(::2), dim = 1).ne.6) call abort + if (any (minloc (e).ne.(/ 7 /))) call abort + if (minval (e).ne.6) call abort + if (any (minloc (e(::2)).ne.(/ 4 /))) call abort + if (minval (e(::2)).ne.6) call abort + if (any (minloc (f, dim = 1).ne.(/ 1, 1, 1, 1, 5, 5, 6, 1, 1, 1 /))) call abort + if (any (minval (f, dim = 1).ne.(/ 7, 7, 7, 7, 6, 5, 4, 7, 7, 7 /))) call abort + if (any (minloc (f(::2,::2), dim = 1).ne.(/ 1, 1, 3, 1, 1 /))) call abort + if (any (minval (f(::2,::2), dim = 1).ne.(/ 7, 7, 6, 7, 7 /))) call abort + if (any (minloc (f, dim = 2).ne.(/ 1, 1, 1, 1, 6, 7, 1, 1, 1, 1 /))) call abort + if (any (minval (f, dim = 2).ne.(/ 7, 7, 7, 7, 5, 4, 7, 7, 7, 7 /))) call abort + if (any (minloc (f(::2,::2), dim = 2).ne.(/ 1, 1, 3, 1, 1 /))) call abort + if (any (minval (f(::2,::2), dim = 2).ne.(/ 7, 7, 6, 7, 7 /))) call abort + if (any (minloc (f).ne.(/ 6, 7 /))) call abort + if (minval (f).ne.4) call abort + if (any (minloc (f(::2,::2)).ne.(/ 3, 3 /))) call abort + if (minval (f(::2,::2)).ne.6) call abort + if (minloc (g, dim = 1).ne.7) call abort + if (minval (g, dim = 1).ne.6) call abort + if (minloc (g(::2), dim = 1).ne.4) call abort + if (minval (g(::2), dim = 1).ne.6) call abort + if (any (minloc (g).ne.(/ 7 /))) call abort + if (minval (g).ne.6) call abort + if (any (minloc (g(::2)).ne.(/ 4 /))) call abort + if (minval (g(::2)).ne.6) call abort + if (any (minloc (h, dim = 1).ne.(/ 1, 1, 1, 1, 5, 5, 6, 1, 1, 1 /))) call abort + if (any (minval (h, dim = 1).ne.(/ 7, 7, 7, 7, 6, 5, 4, 7, 7, 7 /))) call abort + if (any (minloc (h(::2,::2), dim = 1).ne.(/ 1, 1, 3, 1, 1 /))) call abort + if (any (minval (h(::2,::2), dim = 1).ne.(/ 7, 7, 6, 7, 7 /))) call abort + if (any (minloc (h, dim = 2).ne.(/ 1, 1, 1, 1, 6, 7, 1, 1, 1, 1 /))) call abort + if (any (minval (h, dim = 2).ne.(/ 7, 7, 7, 7, 5, 4, 7, 7, 7, 7 /))) call abort + if (any (minloc (h(::2,::2), dim = 2).ne.(/ 1, 1, 3, 1, 1 /))) call abort + if (any (minval (h(::2,::2), dim = 2).ne.(/ 7, 7, 6, 7, 7 /))) call abort + if (any (minloc (h).ne.(/ 6, 7 /))) call abort + if (minval (h).ne.4) call abort + if (any (minloc (h(::2,::2)).ne.(/ 3, 3 /))) call abort + if (minval (h(::2,::2)).ne.6) call abort + l = .true. + l2 = .true. + if (minloc (a, dim = 1, mask = l).ne.7) call abort + if (minval (a, dim = 1, mask = l).ne.6.0) call abort + if (minloc (a(::2), dim = 1, mask = l(::2)).ne.4) call abort + if (minval (a(::2), dim = 1, mask = l(::2)).ne.6.0) call abort + if (any (minloc (a, mask = l).ne.(/ 7 /))) call abort + if (minval (a, mask = l).ne.6.0) call abort + if (any (minloc (a(::2), mask = l(::2)).ne.(/ 4 /))) call abort + if (minval (a(::2), mask = l(::2)).ne.6.0) call abort + if (any (minloc (b, dim = 1, mask = l2).ne.(/ 1, 1, 1, 1, 5, 5, 6, 1, 1, 1 /))) call abort + if (any (minval (b, dim = 1, mask = l2).ne.(/ 7.0, 7.0, 7.0, 7.0, 6.0, 5.0, 4.0, 7.0, 7.0, 7.0 /))) call abort + if (any (minloc (b(::2,::2), dim = 1, mask = l2(::2,::2)).ne.(/ 1, 1, 3, 1, 1 /))) call abort + if (any (minval (b(::2,::2), dim = 1, mask = l2(::2,::2)).ne.(/ 7.0, 7.0, 6.0, 7.0, 7.0 /))) call abort + if (any (minloc (b, dim = 2, mask = l2).ne.(/ 1, 1, 1, 1, 6, 7, 1, 1, 1, 1 /))) call abort + if (any (minval (b, dim = 2, mask = l2).ne.(/ 7.0, 7.0, 7.0, 7.0, 5.0, 4.0, 7.0, 7.0, 7.0, 7.0 /))) call abort + if (any (minloc (b(::2,::2), dim = 2, mask = l2(::2,::2)).ne.(/ 1, 1, 3, 1, 1 /))) call abort + if (any (minval (b(::2,::2), dim = 2, mask = l2(::2,::2)).ne.(/ 7.0, 7.0, 6.0, 7.0, 7.0 /))) call abort + if (any (minloc (b, mask = l2).ne.(/ 6, 7 /))) call abort + if (minval (b, mask = l2).ne.4.0) call abort + if (any (minloc (b(::2,::2), mask = l2(::2,::2)).ne.(/ 3, 3 /))) call abort + if (minval (b(::2,::2), mask = l2(::2,::2)).ne.6.0) call abort + if (minloc (c, dim = 1, mask = l).ne.7) call abort + if (minval (c, dim = 1, mask = l).ne.6.0) call abort + if (minloc (c(::2), dim = 1, mask = l(::2)).ne.4) call abort + if (minval (c(::2), dim = 1, mask = l(::2)).ne.6.0) call abort + if (any (minloc (c, mask = l).ne.(/ 7 /))) call abort + if (minval (c, mask = l).ne.6.0) call abort + if (any (minloc (c(::2), mask = l(::2)).ne.(/ 4 /))) call abort + if (minval (c(::2), mask = l(::2)).ne.6.0) call abort + if (any (minloc (d, dim = 1, mask = l2).ne.(/ 1, 1, 1, 1, 5, 5, 6, 1, 1, 1 /))) call abort + if (any (minval (d, dim = 1, mask = l2).ne.(/ 7.0, 7.0, 7.0, 7.0, 6.0, 5.0, 4.0, 7.0, 7.0, 7.0 /))) call abort + if (any (minloc (d(::2,::2), dim = 1, mask = l2(::2,::2)).ne.(/ 1, 1, 3, 1, 1 /))) call abort + if (any (minval (d(::2,::2), dim = 1, mask = l2(::2,::2)).ne.(/ 7.0, 7.0, 6.0, 7.0, 7.0 /))) call abort + if (any (minloc (d, dim = 2, mask = l2).ne.(/ 1, 1, 1, 1, 6, 7, 1, 1, 1, 1 /))) call abort + if (any (minval (d, dim = 2, mask = l2).ne.(/ 7.0, 7.0, 7.0, 7.0, 5.0, 4.0, 7.0, 7.0, 7.0, 7.0 /))) call abort + if (any (minloc (d(::2,::2), dim = 2, mask = l2(::2,::2)).ne.(/ 1, 1, 3, 1, 1 /))) call abort + if (any (minval (d(::2,::2), dim = 2, mask = l2(::2,::2)).ne.(/ 7.0, 7.0, 6.0, 7.0, 7.0 /))) call abort + if (any (minloc (d, mask = l2).ne.(/ 6, 7 /))) call abort + if (minval (d, mask = l2).ne.4.0) call abort + if (any (minloc (d(::2,::2), mask = l2(::2,::2)).ne.(/ 3, 3 /))) call abort + if (minval (d(::2,::2), mask = l2(::2,::2)).ne.6.0) call abort + if (minloc (e, dim = 1, mask = l).ne.7) call abort + if (minval (e, dim = 1, mask = l).ne.6) call abort + if (minloc (e(::2), dim = 1, mask = l(::2)).ne.4) call abort + if (minval (e(::2), dim = 1, mask = l(::2)).ne.6) call abort + if (any (minloc (e, mask = l).ne.(/ 7 /))) call abort + if (minval (e, mask = l).ne.6) call abort + if (any (minloc (e(::2), mask = l(::2)).ne.(/ 4 /))) call abort + if (minval (e(::2), mask = l(::2)).ne.6) call abort + if (any (minloc (f, dim = 1, mask = l2).ne.(/ 1, 1, 1, 1, 5, 5, 6, 1, 1, 1 /))) call abort + if (any (minval (f, dim = 1, mask = l2).ne.(/ 7, 7, 7, 7, 6, 5, 4, 7, 7, 7 /))) call abort + if (any (minloc (f(::2,::2), dim = 1, mask = l2(::2,::2)).ne.(/ 1, 1, 3, 1, 1 /))) call abort + if (any (minval (f(::2,::2), dim = 1, mask = l2(::2,::2)).ne.(/ 7, 7, 6, 7, 7 /))) call abort + if (any (minloc (f, dim = 2, mask = l2).ne.(/ 1, 1, 1, 1, 6, 7, 1, 1, 1, 1 /))) call abort + if (any (minval (f, dim = 2, mask = l2).ne.(/ 7, 7, 7, 7, 5, 4, 7, 7, 7, 7 /))) call abort + if (any (minloc (f(::2,::2), dim = 2, mask = l2(::2,::2)).ne.(/ 1, 1, 3, 1, 1 /))) call abort + if (any (minval (f(::2,::2), dim = 2, mask = l2(::2,::2)).ne.(/ 7, 7, 6, 7, 7 /))) call abort + if (any (minloc (f, mask = l2).ne.(/ 6, 7 /))) call abort + if (minval (f, mask = l2).ne.4) call abort + if (any (minloc (f(::2,::2), mask = l2(::2,::2)).ne.(/ 3, 3 /))) call abort + if (minval (f(::2,::2), mask = l2(::2,::2)).ne.6) call abort + if (minloc (g, dim = 1, mask = l).ne.7) call abort + if (minval (g, dim = 1, mask = l).ne.6) call abort + if (minloc (g(::2), dim = 1, mask = l(::2)).ne.4) call abort + if (minval (g(::2), dim = 1, mask = l(::2)).ne.6) call abort + if (any (minloc (g, mask = l).ne.(/ 7 /))) call abort + if (minval (g, mask = l).ne.6) call abort + if (any (minloc (g(::2), mask = l(::2)).ne.(/ 4 /))) call abort + if (minval (g(::2), mask = l(::2)).ne.6) call abort + if (any (minloc (h, dim = 1, mask = l2).ne.(/ 1, 1, 1, 1, 5, 5, 6, 1, 1, 1 /))) call abort + if (any (minval (h, dim = 1, mask = l2).ne.(/ 7, 7, 7, 7, 6, 5, 4, 7, 7, 7 /))) call abort + if (any (minloc (h(::2,::2), dim = 1, mask = l2(::2,::2)).ne.(/ 1, 1, 3, 1, 1 /))) call abort + if (any (minval (h(::2,::2), dim = 1, mask = l2(::2,::2)).ne.(/ 7, 7, 6, 7, 7 /))) call abort + if (any (minloc (h, dim = 2, mask = l2).ne.(/ 1, 1, 1, 1, 6, 7, 1, 1, 1, 1 /))) call abort + if (any (minval (h, dim = 2, mask = l2).ne.(/ 7, 7, 7, 7, 5, 4, 7, 7, 7, 7 /))) call abort + if (any (minloc (h(::2,::2), dim = 2, mask = l2(::2,::2)).ne.(/ 1, 1, 3, 1, 1 /))) call abort + if (any (minval (h(::2,::2), dim = 2, mask = l2(::2,::2)).ne.(/ 7, 7, 6, 7, 7 /))) call abort + if (any (minloc (h, mask = l2).ne.(/ 6, 7 /))) call abort + if (minval (h, mask = l2).ne.4) call abort + if (any (minloc (h(::2,::2), mask = l2(::2,::2)).ne.(/ 3, 3 /))) call abort + if (minval (h(::2,::2), mask = l2(::2,::2)).ne.6) call abort + l = .false. + l2 = .false. + if (minloc (a, dim = 1, mask = l).ne.0) call abort + if (minval (a, dim = 1, mask = l).ne.m) call abort + if (minloc (a(::2), dim = 1, mask = l(::2)).ne.0) call abort + if (minval (a(::2), dim = 1, mask = l(::2)).ne.m) call abort + if (any (minloc (a, mask = l).ne.(/ 0 /))) call abort + if (minval (a, mask = l).ne.m) call abort + if (any (minloc (a(::2), mask = l(::2)).ne.(/ 0 /))) call abort + if (minval (a(::2), mask = l(::2)).ne.m) call abort + if (any (minloc (b, dim = 1, mask = l2).ne.(/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /))) call abort + if (any (minval (b, dim = 1, mask = l2).ne.(/ m, m, m, m, m, m, m, m, m, m /))) call abort + if (any (minloc (b(::2,::2), dim = 1, mask = l2(::2,::2)).ne.(/ 0, 0, 0, 0, 0 /))) call abort + if (any (minval (b(::2,::2), dim = 1, mask = l2(::2,::2)).ne.(/ m, m, m, m, m /))) call abort + if (any (minloc (b, dim = 2, mask = l2).ne.(/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /))) call abort + if (any (minval (b, dim = 2, mask = l2).ne.(/ m, m, m, m, m, m, m, m, m, m /))) call abort + if (any (minloc (b(::2,::2), dim = 2, mask = l2(::2,::2)).ne.(/ 0, 0, 0, 0, 0 /))) call abort + if (any (minval (b(::2,::2), dim = 2, mask = l2(::2,::2)).ne.(/ m, m, m, m, m /))) call abort + if (any (minloc (b, mask = l2).ne.(/ 0, 0 /))) call abort + if (minval (b, mask = l2).ne.m) call abort + if (any (minloc (b(::2,::2), mask = l2(::2,::2)).ne.(/ 0, 0 /))) call abort + if (minval (b(::2,::2), mask = l2(::2,::2)).ne.m) call abort + if (minloc (c, dim = 1, mask = l).ne.0) call abort + if (minval (c, dim = 1, mask = l).ne.m) call abort + if (minloc (c(::2), dim = 1, mask = l(::2)).ne.0) call abort + if (minval (c(::2), dim = 1, mask = l(::2)).ne.m) call abort + if (any (minloc (c, mask = l).ne.(/ 0 /))) call abort + if (minval (c, mask = l).ne.m) call abort + if (any (minloc (c(::2), mask = l(::2)).ne.(/ 0 /))) call abort + if (minval (c(::2), mask = l(::2)).ne.m) call abort + if (any (minloc (d, dim = 1, mask = l2).ne.(/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /))) call abort + if (any (minval (d, dim = 1, mask = l2).ne.(/ m, m, m, m, m, m, m, m, m, m /))) call abort + if (any (minloc (d(::2,::2), dim = 1, mask = l2(::2,::2)).ne.(/ 0, 0, 0, 0, 0 /))) call abort + if (any (minval (d(::2,::2), dim = 1, mask = l2(::2,::2)).ne.(/ m, m, m, m, m /))) call abort + if (any (minloc (d, dim = 2, mask = l2).ne.(/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /))) call abort + if (any (minval (d, dim = 2, mask = l2).ne.(/ m, m, m, m, m, m, m, m, m, m /))) call abort + if (any (minloc (d(::2,::2), dim = 2, mask = l2(::2,::2)).ne.(/ 0, 0, 0, 0, 0 /))) call abort + if (any (minval (d(::2,::2), dim = 2, mask = l2(::2,::2)).ne.(/ m, m, m, m, m /))) call abort + if (any (minloc (d, mask = l2).ne.(/ 0, 0 /))) call abort + if (minval (d, mask = l2).ne.m) call abort + if (any (minloc (d(::2,::2), mask = l2(::2,::2)).ne.(/ 0, 0 /))) call abort + if (minval (d(::2,::2), mask = l2(::2,::2)).ne.m) call abort + if (minloc (e, dim = 1, mask = l).ne.0) call abort + if (minval (e, dim = 1, mask = l).ne.n) call abort + if (minloc (e(::2), dim = 1, mask = l(::2)).ne.0) call abort + if (minval (e(::2), dim = 1, mask = l(::2)).ne.n) call abort + if (any (minloc (e, mask = l).ne.(/ 0 /))) call abort + if (minval (e, mask = l).ne.n) call abort + if (any (minloc (e(::2), mask = l(::2)).ne.(/ 0 /))) call abort + if (minval (e(::2), mask = l(::2)).ne.n) call abort + if (any (minloc (f, dim = 1, mask = l2).ne.(/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /))) call abort + if (any (minval (f, dim = 1, mask = l2).ne.(/ n, n, n, n, n, n, n, n, n, n /))) call abort + if (any (minloc (f(::2,::2), dim = 1, mask = l2(::2,::2)).ne.(/ 0, 0, 0, 0, 0 /))) call abort + if (any (minval (f(::2,::2), dim = 1, mask = l2(::2,::2)).ne.(/ n, n, n, n, n /))) call abort + if (any (minloc (f, dim = 2, mask = l2).ne.(/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /))) call abort + if (any (minval (f, dim = 2, mask = l2).ne.(/ n, n, n, n, n, n, n, n, n, n /))) call abort + if (any (minloc (f(::2,::2), dim = 2, mask = l2(::2,::2)).ne.(/ 0, 0, 0, 0, 0 /))) call abort + if (any (minval (f(::2,::2), dim = 2, mask = l2(::2,::2)).ne.(/ n, n, n, n, n /))) call abort + if (any (minloc (f, mask = l2).ne.(/ 0, 0 /))) call abort + if (minval (f, mask = l2).ne.n) call abort + if (any (minloc (f(::2,::2), mask = l2(::2,::2)).ne.(/ 0, 0 /))) call abort + if (minval (f(::2,::2), mask = l2(::2,::2)).ne.n) call abort + if (minloc (g, dim = 1, mask = l).ne.0) call abort + if (minval (g, dim = 1, mask = l).ne.n) call abort + if (minloc (g(::2), dim = 1, mask = l(::2)).ne.0) call abort + if (minval (g(::2), dim = 1, mask = l(::2)).ne.n) call abort + if (any (minloc (g, mask = l).ne.(/ 0 /))) call abort + if (minval (g, mask = l).ne.n) call abort + if (any (minloc (g(::2), mask = l(::2)).ne.(/ 0 /))) call abort + if (minval (g(::2), mask = l(::2)).ne.n) call abort + if (any (minloc (h, dim = 1, mask = l2).ne.(/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /))) call abort + if (any (minval (h, dim = 1, mask = l2).ne.(/ n, n, n, n, n, n, n, n, n, n /))) call abort + if (any (minloc (h(::2,::2), dim = 1, mask = l2(::2,::2)).ne.(/ 0, 0, 0, 0, 0 /))) call abort + if (any (minval (h(::2,::2), dim = 1, mask = l2(::2,::2)).ne.(/ n, n, n, n, n /))) call abort + if (any (minloc (h, dim = 2, mask = l2).ne.(/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /))) call abort + if (any (minval (h, dim = 2, mask = l2).ne.(/ n, n, n, n, n, n, n, n, n, n /))) call abort + if (any (minloc (h(::2,::2), dim = 2, mask = l2(::2,::2)).ne.(/ 0, 0, 0, 0, 0 /))) call abort + if (any (minval (h(::2,::2), dim = 2, mask = l2(::2,::2)).ne.(/ n, n, n, n, n /))) call abort + if (any (minloc (h, mask = l2).ne.(/ 0, 0 /))) call abort + if (minval (h, mask = l2).ne.n) call abort + if (any (minloc (h(::2,::2), mask = l2(::2,::2)).ne.(/ 0, 0 /))) call abort + if (minval (h(::2,::2), mask = l2(::2,::2)).ne.n) call abort + a = 7.0 + b = 7.0 + c = 7.0 + d = 7.0 +end diff --git a/gcc/testsuite/gfortran.dg/minlocval_4.f90 b/gcc/testsuite/gfortran.dg/minlocval_4.f90 new file mode 100644 index 0000000..1e72ba8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/minlocval_4.f90 @@ -0,0 +1,118 @@ +! { dg-do run } + real :: a(3,3), b(3), nan, minf, pinf, h + logical :: l, l2 + logical :: l3(3,3), l4(3,3), l5(3,3) + + nan = 0.0 + minf = 0.0 + pinf = 0.0 + nan = 0.0/nan + minf = -1.0/minf + pinf = 1.0/pinf + h = huge(h) + l = .false. + l2 = .true. + l3 = .false. + l4 = .true. + l5 = .true. + l5(1,1) = .false. + l5(1,2) = .false. + l5(2,3) = .false. + a = reshape ((/ nan, nan, nan, pinf, pinf, pinf, pinf, minf, pinf /), (/ 3, 3 /)) + if (minval (a).ne.minf) call abort + if (any (minloc (a).ne.(/ 2, 3 /))) call abort + b = minval (a, dim = 1) + if (.not.isnan(b(1))) call abort + b(1) = 0.0 + if (any (b.ne.(/ 0.0, pinf, minf /))) call abort + if (any (minloc (a, dim = 1).ne.(/ 1, 1, 2 /))) call abort + b = minval (a, dim = 2) + if (any (b.ne.(/ pinf, minf, pinf /))) call abort + if (any (minloc (a, dim = 2).ne.(/ 2, 3, 2 /))) call abort + if (minval (a, mask = l).ne.h) call abort + if (any (minloc (a, mask = l).ne.(/ 0, 0 /))) call abort + b = minval (a, dim = 1, mask = l) + if (any (b.ne.(/ h, h, h /))) call abort + if (any (minloc (a, dim = 1, mask = l).ne.(/ 0, 0, 0 /))) call abort + b = minval (a, dim = 2, mask = l) + if (any (b.ne.(/ h, h, h /))) call abort + if (any (minloc (a, dim = 2, mask = l).ne.(/ 0, 0, 0 /))) call abort + if (minval (a, mask = l3).ne.h) call abort + if (any (minloc (a, mask = l3).ne.(/ 0, 0 /))) call abort + b = minval (a, dim = 1, mask = l3) + if (any (b.ne.(/ h, h, h /))) call abort + if (any (minloc (a, dim = 1, mask = l3).ne.(/ 0, 0, 0 /))) call abort + b = minval (a, dim = 2, mask = l3) + if (any (b.ne.(/ h, h, h /))) call abort + if (any (minloc (a, dim = 2, mask = l3).ne.(/ 0, 0, 0 /))) call abort + if (minval (a, mask = l2).ne.minf) call abort + if (minval (a, mask = l4).ne.minf) call abort + if (any (minloc (a, mask = l2).ne.(/ 2, 3 /))) call abort + if (any (minloc (a, mask = l4).ne.(/ 2, 3 /))) call abort + b = minval (a, dim = 1, mask = l2) + if (.not.isnan(b(1))) call abort + b(1) = 0.0 + if (any (b.ne.(/ 0.0, pinf, minf /))) call abort + if (any (minloc (a, dim = 1, mask = l2).ne.(/ 1, 1, 2 /))) call abort + b = minval (a, dim = 2, mask = l2) + if (any (b.ne.(/ pinf, minf, pinf /))) call abort + if (any (minloc (a, dim = 2, mask = l2).ne.(/ 2, 3, 2 /))) call abort + b = minval (a, dim = 1, mask = l4) + if (.not.isnan(b(1))) call abort + b(1) = 0.0 + if (any (b.ne.(/ 0.0, pinf, minf /))) call abort + if (any (minloc (a, dim = 1, mask = l2).ne.(/ 1, 1, 2 /))) call abort + b = minval (a, dim = 2, mask = l4) + if (any (b.ne.(/ pinf, minf, pinf /))) call abort + if (any (minloc (a, dim = 2, mask = l2).ne.(/ 2, 3, 2 /))) call abort + if (minval (a, mask = l5).ne.pinf) call abort + if (any (minloc (a, mask = l5).ne.(/ 2, 2 /))) call abort + b = minval (a, dim = 1, mask = l5) + if (.not.isnan(b(1))) call abort + b(1) = 0.0 + if (any (b.ne.(/ 0.0, pinf, pinf /))) call abort + if (any (minloc (a, dim = 1, mask = l5).ne.(/ 2, 2, 1 /))) call abort + b = minval (a, dim = 2, mask = l5) + if (any (b.ne.(/ pinf, pinf, pinf /))) call abort + if (any (minloc (a, dim = 2, mask = l5).ne.(/ 3, 2, 2 /))) call abort + a = nan + if (.not.isnan(minval (a))) call abort + if (minval (a, mask = l).ne.h) call abort + if (.not.isnan(minval (a, mask = l2))) call abort + if (minval (a, mask = l3).ne.h) call abort + if (.not.isnan(minval (a, mask = l4))) call abort + if (.not.isnan(minval (a, mask = l5))) call abort + if (any (minloc (a).ne.(/ 1, 1 /))) call abort + if (any (minloc (a, mask = l).ne.(/ 0, 0 /))) call abort + if (any (minloc (a, mask = l2).ne.(/ 1, 1 /))) call abort + if (any (minloc (a, mask = l3).ne.(/ 0, 0 /))) call abort + if (any (minloc (a, mask = l4).ne.(/ 1, 1 /))) call abort + if (any (minloc (a, mask = l5).ne.(/ 2, 1 /))) call abort + a = pinf + if (minval (a).ne.pinf) call abort + if (minval (a, mask = l).ne.h) call abort + if (minval (a, mask = l2).ne.pinf) call abort + if (minval (a, mask = l3).ne.h) call abort + if (minval (a, mask = l4).ne.pinf) call abort + if (minval (a, mask = l5).ne.pinf) call abort + if (any (minloc (a).ne.(/ 1, 1 /))) call abort + if (any (minloc (a, mask = l).ne.(/ 0, 0 /))) call abort + if (any (minloc (a, mask = l2).ne.(/ 1, 1 /))) call abort + if (any (minloc (a, mask = l3).ne.(/ 0, 0 /))) call abort + if (any (minloc (a, mask = l4).ne.(/ 1, 1 /))) call abort + if (any (minloc (a, mask = l5).ne.(/ 2, 1 /))) call abort + a = nan + a(1,3) = pinf + if (minval (a).ne.pinf) call abort + if (minval (a, mask = l).ne.h) call abort + if (minval (a, mask = l2).ne.pinf) call abort + if (minval (a, mask = l3).ne.h) call abort + if (minval (a, mask = l4).ne.pinf) call abort + if (minval (a, mask = l5).ne.pinf) call abort + if (any (minloc (a).ne.(/ 1, 3 /))) call abort + if (any (minloc (a, mask = l).ne.(/ 0, 0 /))) call abort + if (any (minloc (a, mask = l2).ne.(/ 1, 3 /))) call abort + if (any (minloc (a, mask = l3).ne.(/ 0, 0 /))) call abort + if (any (minloc (a, mask = l4).ne.(/ 1, 3 /))) call abort + if (any (minloc (a, mask = l5).ne.(/ 1, 3 /))) call abort +end |