blob: 602d8f782170333a9a2f126a29a7bbcaf13c8212 [file] [log] [blame]
! { dg-do run { target c99_runtime } }
! { dg-additional-sources ISO_Fortran_binding_10.c }
!
! Test the fix of PR89843.
!
! Contributed by Reinhold Bader <Bader@lrz.de>
!
module mod_section_01
use, intrinsic :: iso_c_binding
implicit none
interface
subroutine si(this, flag, status) bind(c)
import :: c_float, c_int
real(c_float) :: this(:,:)
integer(c_int), value :: flag
integer(c_int) :: status
end subroutine si
end interface
contains
subroutine sa(this, flag, status) bind(c)
real(c_float) :: this(:)
integer(c_int), value :: flag
integer(c_int) :: status
status = 0
select case (flag)
case (0)
if (is_contiguous(this)) then
write(*,*) 'FAIL 1:'
status = status + 1
end if
if (size(this,1) /= 3) then
write(*,*) 'FAIL 2:',size(this)
status = status + 1
goto 10
end if
if (maxval(abs(this - [ 1.0, 3.0, 5.0 ])) > 1.0e-6) then
write(*,*) 'FAIL 3:',abs(this)
status = status + 1
end if
10 continue
case (1)
if (size(this,1) /= 3) then
write(*,*) 'FAIL 4:',size(this)
status = status + 1
goto 20
end if
if (maxval(abs(this - [ 11.0, 12.0, 13.0 ])) > 1.0e-6) then
write(*,*) 'FAIL 5:',this
status = status + 1
end if
20 continue
case (2)
if (size(this,1) /= 4) then
write(*,*) 'FAIL 6:',size(this)
status = status + 1
goto 30
end if
if (maxval(abs(this - [ 2.0, 7.0, 12.0, 17.0 ])) > 1.0e-6) then
write(*,*) 'FAIL 7:',this
status = status + 1
end if
30 continue
end select
! if (status == 0) then
! write(*,*) 'OK'
! end if
end subroutine sa
end module mod_section_01
program section_01
use mod_section_01
implicit none
real(c_float) :: v(5,4)
integer :: i
integer :: status
v = reshape( [ (real(i), i = 1, 20) ], [ 5, 4 ] )
call si(v, 0, status)
if (status .ne. 0) stop 1
call sa(v(1:5:2, 1), 0, status)
if (status .ne. 0) stop 2
call si(v, 1, status)
if (status .ne. 0) stop 3
call sa(v(1:3, 3), 1, status)
if (status .ne. 0) stop 4
call si(v, 2, status)
if (status .ne. 0) stop 5
call sa(v(2,1:4), 2, status)
if (status .ne. 0) stop 6
end program section_01