blob: 63b7d904c26e7be103386f0580c8ebfcd2ae8b34 [file] [log] [blame]
! { dg-do run }
!
! Test the fix for PR94022
!
function isasa_f(a) result(s)
implicit none
integer, intent(in) :: a(..)
logical :: s
select rank(a)
rank(*)
s = .true.
rank default
s = .false.
end select
return
end function isasa_f
function isasa_c(a) result(s) bind(c)
use, intrinsic :: iso_c_binding, only: c_int, c_bool
implicit none
integer(kind=c_int), intent(in) :: a(..)
logical(kind=c_bool) :: s
select rank(a)
rank(*)
s = .true.
rank default
s = .false.
end select
return
end function isasa_c
program isasa_p
implicit none
interface
function isasa_f(a) result(s)
implicit none
integer, intent(in) :: a(..)
logical :: s
end function isasa_f
function isasa_c(a) result(s) bind(c)
use, intrinsic :: iso_c_binding, only: c_int, c_bool
implicit none
integer(kind=c_int), intent(in) :: a(..)
logical(kind=c_bool) :: s
end function isasa_c
end interface
integer, parameter :: sz = 7
integer, parameter :: lb = 3
integer, parameter :: ub = 9
integer, parameter :: ex = ub-lb+1
integer :: arr(sz,lb:ub)
arr = 1
if (asaf_a(arr, lb+1, ub-1)) stop 1
if (asaf_p(arr, lb+1, ub-1)) stop 2
if (asaf_a(arr, 2, ex-1)) stop 3
if (asaf_p(arr, 2, ex-1)) stop 4
if (asac_a(arr, lb+1, ub-1)) stop 5
if (asac_p(arr, lb+1, ub-1)) stop 6
if (asac_a(arr, 2, ex-1)) stop 7
if (asac_p(arr, 2, ex-1)) stop 8
stop
contains
function asaf_a(a, lb, ub) result(s)
integer, intent(in) :: lb
integer, target, intent(in) :: a(sz,lb:*)
integer, intent(in) :: ub
logical :: s
s = isasa_f(a(:,lb:ub))
return
end function asaf_a
function asaf_p(a, lb, ub) result(s)
integer, intent(in) :: lb
integer, target, intent(in) :: a(sz,lb:*)
integer, intent(in) :: ub
logical :: s
integer, pointer :: p(:,:)
p => a(:,lb:ub)
s = isasa_f(p)
return
end function asaf_p
function asac_a(a, lb, ub) result(s)
integer, intent(in) :: lb
integer, target, intent(in) :: a(sz,lb:*)
integer, intent(in) :: ub
logical :: s
s = logical(isasa_c(a(:,lb:ub)))
return
end function asac_a
function asac_p(a, lb, ub) result(s)
integer, intent(in) :: lb
integer, target, intent(in) :: a(sz,lb:*)
integer, intent(in) :: ub
logical :: s
integer, pointer :: p(:,:)
p => a(:,lb:ub)
s = logical(isasa_c(p))
return
end function asac_p
end program isasa_p