1! { dg-do run } 2! { dg-options "-fdefault-integer-8" } 3! Check max/minloc. 4! PR fortran/32956, wrong mask kind with -fdefault-integer-8 5! 6program test 7 implicit none 8 integer :: i(1), j(-1:1), res(1) 9 logical, volatile :: m(3), m2(3) 10 m = (/ .false., .false., .false. /) 11 m2 = (/ .false., .true., .false. /) 12 call check(1, 0, MAXLOC((/ 42, 23, 11 /), DIM=1, MASK=.FALSE.)) 13 call check(2, 0, MAXLOC((/ 42, 23, 11 /), DIM=1, MASK=m)) 14 call check(3, 2, MAXLOC((/ 42, 23, 11 /), DIM=1, MASK=m2)) 15 call check(4, 0, MAXLOC(i(1:0), DIM=1, MASK=.TRUE.)) 16 call check(5, 0, MAXLOC(i(1:0), DIM=1, MASK=.FALSE.)) 17 call check(6, 0, MAXLOC(i(1:0), DIM=1, MASK=m(1:0))) 18 call check(7, 0, MAXLOC(i(1:0), DIM=1)) 19 call check(8, 0, MINLOC((/ 42, 23, 11 /), DIM=1, MASK=.FALSE.)) 20 call check(9, 0, MINLOC((/ 42, 23, 11 /), DIM=1, MASK=m)) 21 call check(10, 0, MINLOC(i(1:0), DIM=1, MASK=.FALSE.)) 22 call check(11,0, MINLOC(i(1:0), DIM=1, MASK=m(1:0))) 23 call check(12,0, MINLOC(i(1:0), DIM=1, MASK=.TRUE.)) 24 call check(13,0, MINLOC(i(1:0), DIM=1)) 25 26 j = (/ 1, 2, 1 /); call check(14, 2, MAXLOC(j, DIM=1)) 27 j = (/ 1, 2, 3 /); call check(15, 3, MAXLOC(j, DIM=1)) 28 j = (/ 3, 2, 1 /); call check(16, 1, MAXLOC(j, DIM=1)) 29 j = (/ 1, 2, 1 /); call check(17, 1, MINLOC(j, DIM=1)) 30 j = (/ 1, 2, 3 /); call check(18, 1, MINLOC(j, DIM=1)) 31 j = (/ 3, 2, 1 /); call check(19, 3, MINLOC(j, DIM=1)) 32 33 j = (/ 1, 2, 1 /); call check(20, 2, MAXLOC(j, DIM=1,mask=.true.)) 34 j = (/ 1, 2, 3 /); call check(21, 3, MAXLOC(j, DIM=1,mask=.true.)) 35 j = (/ 3, 2, 1 /); call check(22, 1, MAXLOC(j, DIM=1,mask=.true.)) 36 j = (/ 1, 2, 1 /); call check(23, 1, MINLOC(j, DIM=1,mask=.true.)) 37 j = (/ 1, 2, 3 /); call check(24, 1, MINLOC(j, DIM=1,mask=.true.)) 38 j = (/ 3, 2, 1 /); call check(25, 3, MINLOC(j, DIM=1,mask=.true.)) 39 40 j = (/ 1, 2, 1 /); call check(26, 0, MAXLOC(j, DIM=1,mask=.false.)) 41 j = (/ 1, 2, 3 /); call check(27, 0, MAXLOC(j, DIM=1,mask=.false.)) 42 j = (/ 3, 2, 1 /); call check(28, 0, MAXLOC(j, DIM=1,mask=.false.)) 43 j = (/ 1, 2, 1 /); call check(29, 0, MINLOC(j, DIM=1,mask=.false.)) 44 j = (/ 1, 2, 3 /); call check(30, 0, MINLOC(j, DIM=1,mask=.false.)) 45 j = (/ 3, 2, 1 /); call check(31, 0, MINLOC(j, DIM=1,mask=.false.)) 46 47 j = (/ 1, 2, 1 /); call check(32, 0, MAXLOC(j, DIM=1,mask=m)) 48 j = (/ 1, 2, 3 /); call check(33, 0, MAXLOC(j, DIM=1,mask=m)) 49 j = (/ 3, 2, 1 /); call check(34, 0, MAXLOC(j, DIM=1,mask=m)) 50 j = (/ 1, 2, 1 /); call check(35, 0, MINLOC(j, DIM=1,mask=m)) 51 j = (/ 1, 2, 3 /); call check(36, 0, MINLOC(j, DIM=1,mask=m)) 52 j = (/ 3, 2, 1 /); call check(37, 0, MINLOC(j, DIM=1,mask=m)) 53 54 j = (/ 1, 2, 1 /); call check(38, 2, MAXLOC(j, DIM=1,mask=m2)) 55 j = (/ 1, 2, 3 /); call check(39, 2, MAXLOC(j, DIM=1,mask=m2)) 56 j = (/ 3, 2, 1 /); call check(40, 2, MAXLOC(j, DIM=1,mask=m2)) 57 j = (/ 1, 2, 1 /); call check(41, 2, MINLOC(j, DIM=1,mask=m2)) 58 j = (/ 1, 2, 3 /); call check(42, 2, MINLOC(j, DIM=1,mask=m2)) 59 j = (/ 3, 2, 1 /); call check(43, 2, MINLOC(j, DIM=1,mask=m2)) 60 61! Check the library minloc and maxloc 62 res = MAXLOC((/ 42, 23, 11 /), MASK=.FALSE.); call check(44, 0, res(1)) 63 res = MAXLOC((/ 42, 23, 11 /), MASK=m); call check(45, 0, res(1)) 64 res = MAXLOC((/ 42, 23, 11 /), MASK=m2); call check(46, 2, res(1)) 65 res = MAXLOC(i(1:0), MASK=.TRUE.); call check(47, 0, res(1)) 66 res = MAXLOC(i(1:0), MASK=.FALSE.); call check(48, 0, res(1)) 67 res = MAXLOC(i(1:0), MASK=m(1:0)); call check(49, 0, res(1)) 68 res = MAXLOC(i(1:0)); call check(50, 0, res(1)) 69 res = MINLOC((/ 42, 23, 11 /), MASK=.FALSE.); call check(51, 0, res(1)) 70 res = MINLOC((/ 42, 23, 11 /), MASK=m); call check(52, 0, res(1)) 71 res = MINLOC(i(1:0), MASK=.FALSE.); call check(53, 0, res(1)) 72 res = MINLOC(i(1:0), MASK=m(1:0)); call check(54,0, res(1)) 73 res = MINLOC(i(1:0), MASK=.TRUE.); call check(55,0, res(1)) 74 res = MINLOC(i(1:0)); call check(56,0, res(1)) 75 76 j = (/ 1, 2, 1 /); res = MAXLOC(j); call check(57, 2, res(1)) 77 j = (/ 1, 2, 3 /); res = MAXLOC(j); call check(58, 3, res(1)) 78 j = (/ 3, 2, 1 /); res = MAXLOC(j); call check(59, 1, res(1)) 79 j = (/ 1, 2, 1 /); res = MINLOC(j); call check(60, 1, res(1)) 80 j = (/ 1, 2, 3 /); res = MINLOC(j); call check(61, 1, res(1)) 81 j = (/ 3, 2, 1 /); res = MINLOC(j); call check(62, 3, res(1)) 82 83 j = (/ 1, 2, 1 /); res = MAXLOC(j,mask=.true.); call check(63, 2, res(1)) 84 j = (/ 1, 2, 3 /); res = MAXLOC(j,mask=.true.); call check(65, 3, res(1)) 85 j = (/ 3, 2, 1 /); res = MAXLOC(j,mask=.true.); call check(66, 1, res(1)) 86 j = (/ 1, 2, 1 /); res = MINLOC(j,mask=.true.); call check(67, 1, res(1)) 87 j = (/ 1, 2, 3 /); res = MINLOC(j,mask=.true.); call check(68, 1, res(1)) 88 j = (/ 3, 2, 1 /); res = MINLOC(j,mask=.true.); call check(69, 3, res(1)) 89 90 j = (/ 1, 2, 1 /); res = MAXLOC(j,mask=.false.); call check(70, 0, res(1)) 91 j = (/ 1, 2, 3 /); res = MAXLOC(j,mask=.false.); call check(71, 0, res(1)) 92 j = (/ 3, 2, 1 /); res = MAXLOC(j,mask=.false.); call check(72, 0, res(1)) 93 j = (/ 1, 2, 1 /); res = MINLOC(j,mask=.false.); call check(73, 0, res(1)) 94 j = (/ 1, 2, 3 /); res = MINLOC(j,mask=.false.); call check(74, 0, res(1)) 95 j = (/ 3, 2, 1 /); res = MINLOC(j,mask=.false.); call check(75, 0, res(1)) 96 97 j = (/ 1, 2, 1 /); res = MAXLOC(j,mask=m); call check(76, 0, res(1)) 98 j = (/ 1, 2, 3 /); res = MAXLOC(j,mask=m); call check(77, 0, res(1)) 99 j = (/ 3, 2, 1 /); res = MAXLOC(j,mask=m); call check(78, 0, res(1)) 100 j = (/ 1, 2, 1 /); res = MINLOC(j,mask=m); call check(79, 0, res(1)) 101 j = (/ 1, 2, 3 /); res = MINLOC(j,mask=m); call check(80, 0, res(1)) 102 j = (/ 3, 2, 1 /); res = MINLOC(j,mask=m);call check(81, 0, res(1)) 103 104 j = (/ 1, 2, 1 /); res = MAXLOC(j,mask=m2); call check(82, 2, res(1)) 105 j = (/ 1, 2, 3 /); res = MAXLOC(j,mask=m2); call check(83, 2, res(1)) 106 j = (/ 3, 2, 1 /); res = MAXLOC(j,mask=m2); call check(84, 2, res(1)) 107 j = (/ 1, 2, 1 /); res = MINLOC(j,mask=m2); call check(85, 2, res(1)) 108 j = (/ 1, 2, 3 /); res = MINLOC(j,mask=m2); call check(86, 2, res(1)) 109 j = (/ 3, 2, 1 /); res = MINLOC(j,mask=m2); call check(87, 2, res(1)) 110 111contains 112subroutine check(n, i,j) 113 integer, value, intent(in) :: i,j,n 114 if(i /= j) then 115 call abort() 116! print *, 'ERROR: Test',n,' expected ',i,' received ', j 117 end if 118end subroutine check 119end program 120