1! { dg-do compile } 2! { dg-additional-options "-fimplicit-none" } 3 4! F2018 only permittes len=*, len=: or len=<const> as dummy argument 5! but not len=<non-const-expr> 6! Additionally, for allocatable/pointer, len=: is required. 7 8! Scalar, nonallocatable/nonpointer 9 10subroutine val_s1(x1) bind(C) 11 character(len=1), value :: x1 12end 13 14subroutine val_s2(x2) bind(C) ! { dg-error "Character dummy argument 'x2' at .1. must be of length 1 as it has the VALUE attribute" } 15 character(len=2), value :: x2 16end 17 18subroutine s1 (x1) bind(C) 19 character(len=1) :: x1 20end 21 22subroutine 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" } 23 character(len=2) :: x2 24end 25 26subroutine 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" } 27 integer :: n 28 character(len=n) :: xn 29end 30 31subroutine s4 (xstar) bind(C) 32 character(len=*) :: xstar 33end 34 35! Assumed-shape array, nonallocatable/nonpointer 36 37subroutine as1 (x1) bind(C) 38 character(len=1) :: x1(:) 39end 40 41subroutine as2 (x2) bind(C) 42 character(len=2) :: x2(:,:) 43end 44 45subroutine as3 (xn, n) bind(C) 46 integer :: n 47 character(len=n) :: xn(:,:,:) 48end 49 50subroutine as4 (xstar) bind(C) 51 character(len=*) :: xstar(:,:,:,:) 52end 53 54! Assumed-rank array, nonallocatable/nonpointer 55 56subroutine ar1 (x1) bind(C) 57 character(len=1) :: x1(..) 58end 59 60subroutine ar2 (x2) bind(C) 61 character(len=2) :: x2(..) 62end 63 64subroutine ar3 (xn, n) bind(C) 65 integer :: n 66 character(len=n) :: xn(..) 67end 68 69subroutine ar4 (xstar) bind(C) 70 character(len=*) :: xstar(..) 71end 72 73! Assumed-size array, nonallocatable/nonpointer 74 75subroutine az1 (x1) bind(C) 76 character(len=1) :: x1(*) 77end 78 79subroutine 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" } 80 character(len=2) :: x2(*) 81end 82 83subroutine 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" } 84 integer :: n 85 character(len=n) :: xn(*) 86end 87 88subroutine az4 (xstar) bind(C) 89 character(len=*) :: xstar(*) 90end 91 92! Explicit-size array, nonallocatable/nonpointer 93 94subroutine ae1 (x1) bind(C) 95 character(len=1) :: x1(5) 96end 97 98subroutine 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" } 99 character(len=2) :: x2(7) 100end 101 102subroutine 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" } 103 integer :: n 104 character(len=n) :: xn(9) 105end 106 107subroutine ae4 (xstar) bind(C) 108 character(len=*) :: xstar(3) 109end 110 111! ALLOCATABLE 112! Scalar, allocatable 113 114subroutine s1a (x1) bind(C) ! { dg-error "Allocatable character dummy argument 'x1' at .1. must have deferred length as procedure 's1a' is BIND\\(C\\)" } 115 character(len=1), allocatable :: x1 116end 117 118subroutine s2a (x2) bind(C) ! { dg-error "Allocatable character dummy argument 'x2' at .1. must have deferred length as procedure 's2a' is BIND\\(C\\)" } 119 character(len=2), allocatable :: x2 120end 121 122subroutine s3a (xn, n) bind(C) ! { dg-error "Allocatable character dummy argument 'xn' at .1. must have deferred length as procedure 's3a' is BIND\\(C\\)" } 123 integer :: n 124 character(len=n), allocatable :: xn 125end 126 127subroutine s4a (xstar) bind(C) ! { dg-error "Allocatable character dummy argument 'xstar' at .1. must have deferred length as procedure 's4a' is BIND\\(C\\)" } 128 character(len=*), allocatable :: xstar 129end 130 131subroutine s5a (xcolon) bind(C) 132 character(len=:), allocatable :: xcolon 133end 134 135! Assumed-shape array, allocatable 136 137subroutine a1a (x1) bind(C) ! { dg-error "Allocatable character dummy argument 'x1' at .1. must have deferred length as procedure 'a1a' is BIND\\(C\\)" } 138 character(len=1), allocatable :: x1(:) 139end 140 141subroutine a2a (x2) bind(C) ! { dg-error "Allocatable character dummy argument 'x2' at .1. must have deferred length as procedure 'a2a' is BIND\\(C\\)" } 142 character(len=2), allocatable :: x2(:,:) 143end 144 145subroutine a3a (xn, n) bind(C) ! { dg-error "Allocatable character dummy argument 'xn' at .1. must have deferred length as procedure 'a3a' is BIND\\(C\\)" } 146 integer :: n 147 character(len=n), allocatable :: xn(:,:,:) 148end 149 150subroutine a4a (xstar) bind(C) ! { dg-error "Allocatable character dummy argument 'xstar' at .1. must have deferred length as procedure 'a4a' is BIND\\(C\\)" } 151 character(len=*), allocatable :: xstar(:,:,:,:) 152end 153 154subroutine a5a (xcolon) bind(C) 155 character(len=:), allocatable :: xcolon(:) 156end 157 158! Assumed-rank array, allocatable 159 160subroutine a1ar (x1) bind(C) ! { dg-error "Allocatable character dummy argument 'x1' at .1. must have deferred length as procedure 'a1ar' is BIND\\(C\\)" } 161 character(len=1), allocatable :: x1(..) 162end 163 164subroutine a2ar (x2) bind(C) ! { dg-error "Allocatable character dummy argument 'x2' at .1. must have deferred length as procedure 'a2ar' is BIND\\(C\\)" } 165 character(len=2), allocatable :: x2(..) 166end 167 168subroutine a3ar (xn, n) bind(C) ! { dg-error "Allocatable character dummy argument 'xn' at .1. must have deferred length as procedure 'a3ar' is BIND\\(C\\)" } 169 integer :: n 170 character(len=n), allocatable :: xn(..) 171end 172 173subroutine a4ar (xstar) bind(C) ! { dg-error "Allocatable character dummy argument 'xstar' at .1. must have deferred length as procedure 'a4ar' is BIND\\(C\\)" } 174 character(len=*), allocatable :: xstar(..) 175end 176 177subroutine a5ar (xcolon) bind(C) 178 character(len=:), allocatable :: xcolon(..) 179end 180 181! POINTER 182! Scalar, pointer 183 184subroutine s1p (x1) bind(C) ! { dg-error "Pointer character dummy argument 'x1' at .1. must have deferred length as procedure 's1p' is BIND\\(C\\)" } 185 character(len=1), pointer :: x1 186end 187 188subroutine s2p (x2) bind(C) ! { dg-error "Pointer character dummy argument 'x2' at .1. must have deferred length as procedure 's2p' is BIND\\(C\\)" } 189 character(len=2), pointer :: x2 190end 191 192subroutine s3p (xn, n) bind(C) ! { dg-error "Pointer character dummy argument 'xn' at .1. must have deferred length as procedure 's3p' is BIND\\(C\\)" } 193 integer :: n 194 character(len=n), pointer :: xn 195end 196 197subroutine s4p (xstar) bind(C) ! { dg-error "Pointer character dummy argument 'xstar' at .1. must have deferred length as procedure 's4p' is BIND\\(C\\)" } 198 character(len=*), pointer :: xstar 199end 200 201subroutine s5p (xcolon) bind(C) 202 character(len=:), pointer :: xcolon 203end 204 205! Assumed-shape array, pointer 206 207subroutine a1p (x1) bind(C) ! { dg-error "Pointer character dummy argument 'x1' at .1. must have deferred length as procedure 'a1p' is BIND\\(C\\)" } 208 character(len=1), pointer :: x1(:) 209end 210 211subroutine a2p (x2) bind(C) ! { dg-error "Pointer character dummy argument 'x2' at .1. must have deferred length as procedure 'a2p' is BIND\\(C\\)" } 212 character(len=2), pointer :: x2(:,:) 213end 214 215subroutine a3p (xn, n) bind(C) ! { dg-error "Pointer character dummy argument 'xn' at .1. must have deferred length as procedure 'a3p' is BIND\\(C\\)" } 216 integer :: n 217 character(len=n), pointer :: xn(:,:,:) 218end 219 220subroutine a4p (xstar) bind(C) ! { dg-error "Pointer character dummy argument 'xstar' at .1. must have deferred length as procedure 'a4p' is BIND\\(C\\)" } 221 character(len=*), pointer :: xstar(:,:,:,:) 222end 223 224subroutine a5p (xcolon) bind(C) 225 character(len=:), pointer :: xcolon(:) 226end 227 228! Assumed-rank array, pointer 229 230subroutine a1pr (x1) bind(C) ! { dg-error "Pointer character dummy argument 'x1' at .1. must have deferred length as procedure 'a1pr' is BIND\\(C\\)" } 231 character(len=1), pointer :: x1(..) 232end 233 234subroutine a2pr (x2) bind(C) ! { dg-error "Pointer character dummy argument 'x2' at .1. must have deferred length as procedure 'a2pr' is BIND\\(C\\)" } 235 character(len=2), pointer :: x2(..) 236end 237 238subroutine a3pr (xn, n) bind(C) ! { dg-error "Pointer character dummy argument 'xn' at .1. must have deferred length as procedure 'a3pr' is BIND\\(C\\)" } 239 integer :: n 240 character(len=n), pointer :: xn(..) 241end 242 243subroutine a4pr (xstar) bind(C) ! { dg-error "Pointer character dummy argument 'xstar' at .1. must have deferred length as procedure 'a4pr' is BIND\\(C\\)" } 244 character(len=*), pointer :: xstar(..) 245end 246 247subroutine a5pr (xcolon) bind(C) 248 character(len=:), pointer :: xcolon(..) 249end 250