| ! { 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 |