| ! { dg-do compile} |
| ! |
| ! TS 29113 |
| ! 8.1 Removed restrictions on ISO_C_BINDING module procedures |
| ! |
| ! The function C_LOC from the intrinsic module ISO_C_BINDING has the |
| ! restriction in ISO/IEC 1539-1:2010 that if X is an array, it shall |
| ! be of interoperable type. |
| ! |
| ! [...] |
| ! |
| ! These restrictions are removed. |
| |
| module m |
| use ISO_C_BINDING |
| implicit none |
| |
| ! An obvious example of a type that isn't interoperable is a |
| ! derived type without a bind(c) clause. |
| |
| integer :: buflen |
| parameter (buflen=256) |
| |
| type :: packet |
| integer :: size |
| integer(1) :: buf(buflen) |
| end type |
| |
| contains |
| |
| subroutine test (packets, ptr) |
| type(packet), pointer, intent(in) :: packets(:) |
| type(C_PTR), intent(out) :: ptr |
| |
| ptr = c_loc (packets) |
| end subroutine |
| end module |