blob: 1d566c0334d8721fbc61a7d9292130c1f3e64fc4 [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)
character(len=2) :: x2
end
subroutine s3 (xn, n) bind(C) ! { dg-error "Character dummy argument 'xn' at .1. must be of constant length 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)
character(len=2) :: x2(*)
end
subroutine az3 (xn, n) bind(C) ! { dg-error "Character dummy argument 'xn' at .1. must be of constant length 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)
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 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