summaryrefslogtreecommitdiffstats
path: root/gcc/testsuite/gfortran.dg
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gfortran.dg')
-rw-r--r--gcc/testsuite/gfortran.dg/maxlocval_2.f90153
-rw-r--r--gcc/testsuite/gfortran.dg/maxlocval_3.f90122
-rw-r--r--gcc/testsuite/gfortran.dg/maxlocval_4.f90118
-rw-r--r--gcc/testsuite/gfortran.dg/minlocval_1.f90153
-rw-r--r--gcc/testsuite/gfortran.dg/minlocval_2.f90122
-rw-r--r--gcc/testsuite/gfortran.dg/minlocval_3.f90284
-rw-r--r--gcc/testsuite/gfortran.dg/minlocval_4.f90118
7 files changed, 1070 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/maxlocval_2.f90 b/gcc/testsuite/gfortran.dg/maxlocval_2.f90
new file mode 100644
index 00000000000..82f917a9bc1
--- /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 00000000000..cbd35957b13
--- /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 00000000000..408b08d6fad
--- /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 00000000000..f821e54bd68
--- /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 00000000000..8e04dc6ded8
--- /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 00000000000..6a4fc558a35
--- /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 00000000000..1e72ba8e2a9
--- /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
OpenPOWER on IntegriCloud