blob: 87cfb6ecbd89da4a728ceccc2df025c9383ec84d [file] [log] [blame]
! { dg-do run }
! { dg-additional-sources "fc-out-descriptor-2-c.c dump-descriptors.c" }
! { dg-additional-options "-g" }
!
! This program checks that passing a fixed-size array as an intent(out)
! assumed-rank argument to a C function called from Fortran works.
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
program testit
use iso_c_binding
use mm
implicit none
interface
subroutine ctest (ii, jj, a) bind (c)
use iso_c_binding
use mm
integer(C_INT), value :: ii, jj
type(m), intent(out) :: a(..)
end subroutine
end interface
type(m) :: aa(imax,jmax)
integer :: i, j
! initialize the array to all zeros; ctest will overwrite it.
do j = 1, jmax
do i = 1, imax
aa(i,j)%i = 0
aa(i,j)%j = 0
end do
end do
call ctest (imax, jmax, aa)
call verify (aa)
contains
subroutine verify (a)
use iso_c_binding
use mm
type(m) :: a(:,:)
integer :: i, j
if (rank (a) .ne. 2) stop 100
if (lbound (a, 1) .ne. 1) stop 101
if (lbound (a, 2) .ne. 1) stop 102
if (ubound (a, 1) .ne. imax) stop 103
if (ubound (a, 2) .ne. jmax) 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
end do
end do
end subroutine
end program