blob: 3c3c2574101c4c514339a352e852b4ced322b0ea [file] [log] [blame]
! PR92482
! { dg-do compile}
!
! TS 29113
! 8.7 Interoperability of procedures and procedure interfaces
!
! If a dummy argument in an interoperable interface is of type
! CHARACTER and is allocatable or a pointer, its character length shall
! be deferred.
!
! This test checks that this error is diagnosed and is supposed to fail.
module m
use iso_c_binding
interface
! These are supposed to be OK
subroutine good1 (x, n) bind (c)
use iso_c_binding
character (kind=C_CHAR, len=:), allocatable :: x
integer(C_INT), value :: n
end subroutine
subroutine good2 (x, n) bind (c)
use iso_c_binding
character (kind=C_CHAR, len=:), pointer :: x
integer(C_INT), value :: n
end subroutine
! These are supposed to fail.
subroutine bad1 (x, n) bind (c) ! { dg-error "must have deferred length" }
use iso_c_binding
character (kind=C_CHAR, len=*), allocatable :: x
integer(C_INT), value :: n
end subroutine
subroutine bad2 (x, n) bind (c) ! { dg-error "must have deferred length" }
use iso_c_binding
character (kind=C_CHAR, len=*), pointer :: x
integer(C_INT), value :: n
end subroutine
subroutine bad3 (x, n) bind (c) ! { dg-error "must have deferred length" }
use iso_c_binding
character (kind=C_CHAR, len=80), allocatable :: x
integer(C_INT), value :: n
end subroutine
subroutine bad4 (x, n) bind (c) ! { dg-error "must have deferred length" }
use iso_c_binding
character (kind=C_CHAR, len=80), pointer :: x
integer(C_INT), value :: n
end subroutine
subroutine bad5 (x, n) bind (c) ! { dg-error "must have deferred length" }
use iso_c_binding
character (kind=C_CHAR, len=1), allocatable :: x
integer(C_INT), value :: n
end subroutine
subroutine bad6 (x, n) bind (c) ! { dg-error "must have deferred length" }
use iso_c_binding
character (kind=C_CHAR, len=1), pointer :: x
integer(C_INT), value :: n
end subroutine
subroutine bad7 (x, n) bind (c) ! { dg-error "must have deferred length" }
use iso_c_binding
character (kind=C_CHAR), allocatable :: x
integer(C_INT), value :: n
end subroutine
subroutine bad8 (x, n) bind (c) ! { dg-error "must have deferred length" }
use iso_c_binding
character (kind=C_CHAR), pointer :: x
integer(C_INT), value :: n
end subroutine
end interface
end module