blob: 3d3c77216ca0d7203de8710aa75bf58c11e2ac75 [file] [log] [blame]
! { dg-do run }
!
! Test that arrays that may not be contiguous can be passed both ways
! between Fortran subroutines with C and Fortran binding conventions.
program testit
use iso_c_binding
implicit none
integer(C_INT), target :: aa(10,5)
integer(C_INT), target :: bb(10,10)
integer :: i, j, n
! Test both C and Fortran binding.
n = 0
do j = 1, 10
do i = 1, 5
aa(j,i) = n
n = n + 1
end do
end do
call testc (transpose (aa))
call testf (transpose (aa))
bb = -1
n = 0
do j = 1, 10
do i = 2, 10, 2
bb(i,j) = n
n = n + 1
end do
end do
call testc (bb(2:10:2, :))
call testf (bb(2:10:2, :))
contains
subroutine testc (a) bind (c)
use iso_c_binding
integer(C_INT), intent(in) :: a(:,:)
call checkc (a)
call checkf (a)
end subroutine
subroutine testf (a)
use iso_c_binding
integer(C_INT), intent(in) :: a(:,:)
call checkc (a)
call checkf (a)
end subroutine
subroutine checkc (a) bind (c)
use iso_c_binding
integer(C_INT), intent(in) :: a(:,:)
integer :: i, j, n
if (rank (a) .ne. 2) stop 101
if (size (a, 1) .ne. 5) stop 102
if (size (a, 2) .ne. 10) stop 103
n = 0
do j = 1, 10
do i = 1, 5
if (a(i,j) .ne. n) stop 104
n = n + 1
end do
end do
end subroutine
subroutine checkf (a)
use iso_c_binding
integer(C_INT), intent(in) :: a(:,:)
integer :: i, j, n
if (rank (a) .ne. 2) stop 101
if (size (a, 1) .ne. 5) stop 102
if (size (a, 2) .ne. 10) stop 103
n = 0
do j = 1, 10
do i = 1, 5
if (a(i,j) .ne. n) stop 104
n = n + 1
end do
end do
end subroutine
end program