! { dg-do run } ! PR 82995 - segfault passing on an optional argument; ! this tests the inline versions. module y implicit none contains function sum_1 (input, mask) logical, intent(in), optional :: mask(:) integer, intent(in) :: input(:) integer :: sum_1 sum_1 = sum (input, mask) end function sum_1 function sum_2 (input, mask) logical, intent(in), optional :: mask integer, intent(in) :: input(:) integer :: sum_2 sum_2 = sum(input, mask) end function sum_2 function sum_3 (input, mask) logical, intent(in), optional :: mask(:,:) integer, intent(in) :: input(:,:) integer :: sum_3 sum_3 = sum (input, mask) end function sum_3 function minval_1 (input, mask) logical, intent(in), optional :: mask(:,:) real, intent(in) :: input(:,:) real :: minval_1 minval_1 = minval (input, mask) end function minval_1 function maxval_1 (input, mask) logical, intent(in), optional :: mask real, intent(in) :: input(:,:) real :: maxval_1 maxval_1 = maxval (input, mask) end function maxval_1 function maxloc_1 (input, mask) logical, intent(in), optional :: mask(:) real, intent(in) :: input(:) integer :: maxloc_1 maxloc_1 = maxloc(input, dim=1, mask=mask) end function maxloc_1 function findloc_1 (input, val, mask) logical, intent(in), optional :: mask (:) integer, intent(in) :: input(:) integer, intent(in) :: val integer :: findloc_1 findloc_1 = findloc(input, val, dim=1, mask=mask) end function findloc_1 function findloc_2 (input, val, mask) logical, intent(in), optional :: mask integer, intent(in) :: input(:) integer, intent(in) :: val integer :: findloc_2 findloc_2 = findloc(input, val, dim=1, mask=mask) end function findloc_2 end module y program test_sum_1 use y implicit none integer :: input(5) = [1,2,4,8,16] integer :: i2(2,3) = reshape([1,2,4,8,16,32], [2,3]) real :: r2(2,3) = reshape ([32.,16.,8.,4.,2.,1.], [2,3]) real :: r1(6) = [2.,4.,8.,32.,1.,16.] integer :: res real :: rres res = sum_1(input) if (res /= 31) stop 1 res = sum_2 (input) if (res /= 31) stop 2 res = sum_3 (i2) if (res /= 63) stop 3 rres = minval_1 (r2) if (rres /= 1.0) stop 4 rres = maxval_1 (r2) if (rres /= 32.) stop 5 res = maxloc_1 (r1) if (res /= 4) stop 6 res = findloc_1 (input, 8) if (res /= 4) stop 7 res = findloc_2 (input, 2) if (res /= 2) stop 8 end program test_sum_1