blob: c6f406f3c5c8bd64f094332c62b5615591cf517f [file] [log] [blame]
! { dg-do compile }
! { dg-additional-options "-fimplicit-none" }
! F2018 only permittes len=*, len=: or len=<const> as dummy argument
! but not len=<non-const-expr>
! Additionally, for allocatable/pointer, len=: is required.
! Scalar, nonallocatable/nonpointer
subroutine val_s1(x1) bind(C)
character(len=1), value :: x1
end
subroutine val_s2(x2) bind(C) ! { dg-error "Character dummy argument 'x2' at .1. must be of length 1 as it has the VALUE attribute" }
character(len=2), value :: x2
end
subroutine s1 (x1) bind(C)
character(len=1) :: x1
end
subroutine s2 (x2) bind(C) ! { dg-error "Character dummy argument 'x2' at .1. must be of constant length of one or assumed length, unless it has assumed shape or assumed rank, as procedure 's2' has the BIND\\(C\\) attribute" }
character(len=2) :: x2
end
subroutine s3 (xn, n) bind(C) ! { dg-error "Character dummy argument 'xn' at .1. must be of constant length of one or assumed length, unless it has assumed shape or assumed rank, as procedure 's3' has the BIND\\(C\\) attribute" }
integer :: n
character(len=n) :: xn
end
subroutine s4 (xstar) bind(C) ! { dg-error "Sorry, character dummy argument 'xstar' at .1. with assumed length is not yet supported for procedure 's4' with BIND\\(C\\) attribute" }
character(len=*) :: xstar
end
! Assumed-shape array, nonallocatable/nonpointer
subroutine as1 (x1) bind(C)
character(len=1) :: x1(:)
end
subroutine as2 (x2) bind(C)
character(len=2) :: x2(:,:)
end
subroutine as3 (xn, n) bind(C)
integer :: n
character(len=n) :: xn(:,:,:)
end
subroutine as4 (xstar) bind(C)
character(len=*) :: xstar(:,:,:,:)
end
! Assumed-rank array, nonallocatable/nonpointer
subroutine ar1 (x1) bind(C)
character(len=1) :: x1(..)
end
subroutine ar2 (x2) bind(C)
character(len=2) :: x2(..)
end
subroutine ar3 (xn, n) bind(C)
integer :: n
character(len=n) :: xn(..)
end
subroutine ar4 (xstar) bind(C)
character(len=*) :: xstar(..)
end
! Assumed-size array, nonallocatable/nonpointer
subroutine az1 (x1) bind(C)
character(len=1) :: x1(*)
end
subroutine az2 (x2) bind(C) ! { dg-error "Character dummy argument 'x2' at .1. must be of constant length of one or assumed length, unless it has assumed shape or assumed rank, as procedure 'az2' has the BIND\\(C\\) attribute" }
character(len=2) :: x2(*)
end
subroutine az3 (xn, n) bind(C) ! { dg-error "Character dummy argument 'xn' at .1. must be of constant length of one or assumed length, unless it has assumed shape or assumed rank, as procedure 'az3' has the BIND\\(C\\) attribute" }
integer :: n
character(len=n) :: xn(*)
end
subroutine az4 (xstar) bind(C) ! { dg-error "Sorry, character dummy argument 'xstar' at .1. with assumed length is not yet supported for procedure 'az4' with BIND\\(C\\) attribute" }
character(len=*) :: xstar(*)
end
! Explicit-size array, nonallocatable/nonpointer
subroutine ae1 (x1) bind(C)
character(len=1) :: x1(5)
end
subroutine ae2 (x2) bind(C) ! { dg-error "Character dummy argument 'x2' at .1. must be of constant length of one or assumed length, unless it has assumed shape or assumed rank, as procedure 'ae2' has the BIND\\(C\\) attribute" }
character(len=2) :: x2(7)
end
subroutine ae3 (xn, n) bind(C) ! { dg-error "Character dummy argument 'xn' at .1. must be of constant length of one or assumed length, unless it has assumed shape or assumed rank, as procedure 'ae3' has the BIND\\(C\\) attribute" }
integer :: n
character(len=n) :: xn(9)
end
subroutine ae4 (xstar) bind(C) ! { dg-error "Sorry, character dummy argument 'xstar' at .1. with assumed length is not yet supported for procedure 'ae4' with BIND\\(C\\) attribute" }
character(len=*) :: xstar(3)
end
! ALLOCATABLE
! Scalar, allocatable
subroutine s1a (x1) bind(C) ! { dg-error "Allocatable character dummy argument 'x1' at .1. must have deferred length as procedure 's1a' is BIND\\(C\\)" }
character(len=1), allocatable :: x1
end
subroutine s2a (x2) bind(C) ! { dg-error "Allocatable character dummy argument 'x2' at .1. must have deferred length as procedure 's2a' is BIND\\(C\\)" }
character(len=2), allocatable :: x2
end
subroutine s3a (xn, n) bind(C) ! { dg-error "Allocatable character dummy argument 'xn' at .1. must have deferred length as procedure 's3a' is BIND\\(C\\)" }
integer :: n
character(len=n), allocatable :: xn
end
subroutine s4a (xstar) bind(C) ! { dg-error "Allocatable character dummy argument 'xstar' at .1. must have deferred length as procedure 's4a' is BIND\\(C\\)" }
character(len=*), allocatable :: xstar
end
subroutine s5a (xcolon) bind(C) ! { dg-error "Sorry, deferred-length scalar character dummy argument 'xcolon' at .1. of procedure 's5a' with BIND\\(C\\) not yet supported" }
character(len=:), allocatable :: xcolon
end
! Assumed-shape array, allocatable
subroutine a1a (x1) bind(C) ! { dg-error "Allocatable character dummy argument 'x1' at .1. must have deferred length as procedure 'a1a' is BIND\\(C\\)" }
character(len=1), allocatable :: x1(:)
end
subroutine a2a (x2) bind(C) ! { dg-error "Allocatable character dummy argument 'x2' at .1. must have deferred length as procedure 'a2a' is BIND\\(C\\)" }
character(len=2), allocatable :: x2(:,:)
end
subroutine a3a (xn, n) bind(C) ! { dg-error "Allocatable character dummy argument 'xn' at .1. must have deferred length as procedure 'a3a' is BIND\\(C\\)" }
integer :: n
character(len=n), allocatable :: xn(:,:,:)
end
subroutine a4a (xstar) bind(C) ! { dg-error "Allocatable character dummy argument 'xstar' at .1. must have deferred length as procedure 'a4a' is BIND\\(C\\)" }
character(len=*), allocatable :: xstar(:,:,:,:)
end
subroutine a5a (xcolon) bind(C)
character(len=:), allocatable :: xcolon(:)
end
! Assumed-rank array, allocatable
subroutine a1ar (x1) bind(C) ! { dg-error "Allocatable character dummy argument 'x1' at .1. must have deferred length as procedure 'a1ar' is BIND\\(C\\)" }
character(len=1), allocatable :: x1(..)
end
subroutine a2ar (x2) bind(C) ! { dg-error "Allocatable character dummy argument 'x2' at .1. must have deferred length as procedure 'a2ar' is BIND\\(C\\)" }
character(len=2), allocatable :: x2(..)
end
subroutine a3ar (xn, n) bind(C) ! { dg-error "Allocatable character dummy argument 'xn' at .1. must have deferred length as procedure 'a3ar' is BIND\\(C\\)" }
integer :: n
character(len=n), allocatable :: xn(..)
end
subroutine a4ar (xstar) bind(C) ! { dg-error "Allocatable character dummy argument 'xstar' at .1. must have deferred length as procedure 'a4ar' is BIND\\(C\\)" }
character(len=*), allocatable :: xstar(..)
end
subroutine a5ar (xcolon) bind(C)
character(len=:), allocatable :: xcolon(..)
end
! POINTER
! Scalar, pointer
subroutine s1p (x1) bind(C) ! { dg-error "Pointer character dummy argument 'x1' at .1. must have deferred length as procedure 's1p' is BIND\\(C\\)" }
character(len=1), pointer :: x1
end
subroutine s2p (x2) bind(C) ! { dg-error "Pointer character dummy argument 'x2' at .1. must have deferred length as procedure 's2p' is BIND\\(C\\)" }
character(len=2), pointer :: x2
end
subroutine s3p (xn, n) bind(C) ! { dg-error "Pointer character dummy argument 'xn' at .1. must have deferred length as procedure 's3p' is BIND\\(C\\)" }
integer :: n
character(len=n), pointer :: xn
end
subroutine s4p (xstar) bind(C) ! { dg-error "Pointer character dummy argument 'xstar' at .1. must have deferred length as procedure 's4p' is BIND\\(C\\)" }
character(len=*), pointer :: xstar
end
subroutine s5p (xcolon) bind(C) ! { dg-error "Sorry, deferred-length scalar character dummy argument 'xcolon' at .1. of procedure 's5p' with BIND\\(C\\) not yet supported" }
character(len=:), pointer :: xcolon
end
! Assumed-shape array, pointer
subroutine a1p (x1) bind(C) ! { dg-error "Pointer character dummy argument 'x1' at .1. must have deferred length as procedure 'a1p' is BIND\\(C\\)" }
character(len=1), pointer :: x1(:)
end
subroutine a2p (x2) bind(C) ! { dg-error "Pointer character dummy argument 'x2' at .1. must have deferred length as procedure 'a2p' is BIND\\(C\\)" }
character(len=2), pointer :: x2(:,:)
end
subroutine a3p (xn, n) bind(C) ! { dg-error "Pointer character dummy argument 'xn' at .1. must have deferred length as procedure 'a3p' is BIND\\(C\\)" }
integer :: n
character(len=n), pointer :: xn(:,:,:)
end
subroutine a4p (xstar) bind(C) ! { dg-error "Pointer character dummy argument 'xstar' at .1. must have deferred length as procedure 'a4p' is BIND\\(C\\)" }
character(len=*), pointer :: xstar(:,:,:,:)
end
subroutine a5p (xcolon) bind(C)
character(len=:), pointer :: xcolon(:)
end
! Assumed-rank array, pointer
subroutine a1pr (x1) bind(C) ! { dg-error "Pointer character dummy argument 'x1' at .1. must have deferred length as procedure 'a1pr' is BIND\\(C\\)" }
character(len=1), pointer :: x1(..)
end
subroutine a2pr (x2) bind(C) ! { dg-error "Pointer character dummy argument 'x2' at .1. must have deferred length as procedure 'a2pr' is BIND\\(C\\)" }
character(len=2), pointer :: x2(..)
end
subroutine a3pr (xn, n) bind(C) ! { dg-error "Pointer character dummy argument 'xn' at .1. must have deferred length as procedure 'a3pr' is BIND\\(C\\)" }
integer :: n
character(len=n), pointer :: xn(..)
end
subroutine a4pr (xstar) bind(C) ! { dg-error "Pointer character dummy argument 'xstar' at .1. must have deferred length as procedure 'a4pr' is BIND\\(C\\)" }
character(len=*), pointer :: xstar(..)
end
subroutine a5pr (xcolon) bind(C)
character(len=:), pointer :: xcolon(..)
end