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