blob: f52a631b157424024e5de9335a4c95713ed6b7c7 [file] [log] [blame]
! { dg-do run }
! { dg-additional-sources "cf-descriptor-1-c.c dump-descriptors.c" }
!
! This program checks that building a descriptor for a fixed-size array
! in C works and that you can use it to call back into a Fortran function
! declared to have c binding, as an assumed-shape argument.
module mm
use iso_c_binding
type, bind (c) :: m
integer(C_INT) :: i, j
end type
integer, parameter :: imax=10, jmax=5
end module
subroutine ftest (a, b) bind (c, name="ftest")
use iso_c_binding
use mm
type(m) :: a(:,:), b(:,:)
integer :: i, j
if (size (a,1) .ne. imax) stop 101
if (size (a,2) .ne. jmax) stop 102
if (size (b,1) .ne. jmax) stop 103
if (size (b,2) .ne. imax) stop 104
do j = 1, jmax
do i = 1, imax
if (a(i,j)%i .ne. i) stop 201
if (a(i,j)%j .ne. j) stop 202
if (b(j,i)%i .ne. i) stop 203
if (b(j,i)%j .ne. j) stop 204
end do
end do
end subroutine
program testit
use iso_c_binding
use mm
implicit none
interface
subroutine ctest (a) bind (c)
use iso_c_binding
use mm
type(m) :: a(:,:)
end subroutine
end interface
type(m) :: aa(imax,jmax)
integer :: i, j
do j = 1, jmax
do i = 1, imax
aa(i,j)%i = i
aa(i,j)%j = j
end do
end do
! Pass the initialized array to a C function ctest, which will generate its
! transpose and call ftest with it.
call ctest (aa)
end program