blob: 76470bd46cd9acb71299f29d692b4d45154feda6 [file] [log] [blame]
! { 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