1! { dg-do run } 2! PR 16946 3! Not all allowed combinations of arguments for MAXVAL, MINVAL, 4! PRODUCT and SUM were supported. 5program reduction_mask 6 implicit none 7 logical :: equal(3) 8 9 integer, parameter :: res(4*9) = (/ 3, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, & 10 1, 1, 1, 1, 1, 6, 6, 6, 2, 2, 2, 2, 2, 2, 6, 6, 6, 3, 3, 3, 3, 3, 3 /) 11 integer :: val(4*9) 12 complex :: cval(2*9), cin(3) 13 14 equal = (/ .true., .true., .false. /) 15 16 ! use all combinations of the dim and mask arguments for the 17 ! reduction intrinsics 18 val( 1) = maxval((/ 1, 2, 3 /)) 19 val( 2) = maxval((/ 1, 2, 3 /), 1) 20 val( 3) = maxval((/ 1, 2, 3 /), dim=1) 21 val( 4) = maxval((/ 1, 2, 3 /), equal) 22 val( 5) = maxval((/ 1, 2, 3 /), mask=equal) 23 val( 6) = maxval((/ 1, 2, 3 /), 1, equal) 24 val( 7) = maxval((/ 1, 2, 3 /), 1, mask=equal) 25 val( 8) = maxval((/ 1, 2, 3 /), dim=1, mask=equal) 26 val( 9) = maxval((/ 1, 2, 3 /), mask=equal, dim=1) 27 28 val(10) = minval((/ 1, 2, 3 /)) 29 val(11) = minval((/ 1, 2, 3 /), 1) 30 val(12) = minval((/ 1, 2, 3 /), dim=1) 31 val(13) = minval((/ 1, 2, 3 /), equal) 32 val(14) = minval((/ 1, 2, 3 /), mask=equal) 33 val(15) = minval((/ 1, 2, 3 /), 1, equal) 34 val(16) = minval((/ 1, 2, 3 /), 1, mask=equal) 35 val(17) = minval((/ 1, 2, 3 /), dim=1, mask=equal) 36 val(18) = minval((/ 1, 2, 3 /), mask=equal, dim=1) 37 38 val(19) = product((/ 1, 2, 3 /)) 39 val(20) = product((/ 1, 2, 3 /), 1) 40 val(21) = product((/ 1, 2, 3 /), dim=1) 41 val(22) = product((/ 1, 2, 3 /), equal) 42 val(23) = product((/ 1, 2, 3 /), mask=equal) 43 val(24) = product((/ 1, 2, 3 /), 1, equal) 44 val(25) = product((/ 1, 2, 3 /), 1, mask=equal) 45 val(26) = product((/ 1, 2, 3 /), dim=1, mask=equal) 46 val(27) = product((/ 1, 2, 3 /), mask=equal, dim=1) 47 48 val(28) = sum((/ 1, 2, 3 /)) 49 val(29) = sum((/ 1, 2, 3 /), 1) 50 val(30) = sum((/ 1, 2, 3 /), dim=1) 51 val(31) = sum((/ 1, 2, 3 /), equal) 52 val(32) = sum((/ 1, 2, 3 /), mask=equal) 53 val(33) = sum((/ 1, 2, 3 /), 1, equal) 54 val(34) = sum((/ 1, 2, 3 /), 1, mask=equal) 55 val(35) = sum((/ 1, 2, 3 /), dim=1, mask=equal) 56 val(36) = sum((/ 1, 2, 3 /), mask=equal, dim=1) 57 58 if (any (val /= res)) STOP 1 59 60 ! Tests for complex arguments. These were broken by the original fix. 61 62 cin = cmplx((/1,2,3/)) 63 64 cval(1) = product(cin) 65 cval(2) = product(cin, 1) 66 cval(3) = product(cin, dim=1) 67 cval(4) = product(cin, equal) 68 cval(5) = product(cin, mask=equal) 69 cval(6) = product(cin, 1, equal) 70 cval(7) = product(cin, 1, mask=equal) 71 cval(8) = product(cin, dim=1, mask=equal) 72 cval(9) = product(cin, mask=equal, dim=1) 73 74 cval(10) = sum(cin) 75 cval(11) = sum(cin, 1) 76 cval(12) = sum(cin, dim=1) 77 cval(13) = sum(cin, equal) 78 cval(14) = sum(cin, mask=equal) 79 cval(15) = sum(cin, 1, equal) 80 cval(16) = sum(cin, 1, mask=equal) 81 cval(17) = sum(cin, dim=1, mask=equal) 82 cval(18) = sum(cin, mask=equal, dim=1) 83 84 if (any (cval /= cmplx(res(19:36)))) STOP 2 85end program reduction_mask 86