nvptx, libgfortran: Switch out of "minimal" mode
[official-gcc.git] / gcc / testsuite / gfortran.dg / sizeof_6.f90
blob21b57350dc3fa1a2ead432f2448a5acc029eb4b6
1 ! { dg-do run }
3 ! Check that sizeof is properly handled
5 use iso_c_binding
6 implicit none (type, external)
8 type t
9 integer, allocatable :: a(:,:,:), aa
10 integer :: b(5), c
11 end type t
13 type t2
14 class(t), allocatable :: d(:,:), e
15 end type t2
17 type, extends(t2) :: t2e
18 integer :: q(7), z
19 end type t2e
21 type t3
22 class(t2), allocatable :: ct2, ct2a(:,:,:)
23 type(t2), allocatable :: tt2, tt2a(:,:,:)
24 integer, allocatable :: ii, iia(:,:,:)
25 end type t3
27 type(t3) :: var, vara(5)
28 type(t3), allocatable :: avar, avara(:)
29 class(t3), allocatable :: cvar, cvara(:)
30 type(t2), allocatable :: ax, axa(:,:,:)
31 class(t2), allocatable :: cx, cxa(:,:,:)
33 integer(c_size_t) :: n
35 allocate (t3 :: avar, avara(5))
36 allocate (t3 :: cvar, cvara(5))
38 n = sizeof(var)
40 ! Assume alignment plays no tricks and system has 32bit/64bit.
41 ! If needed change
42 if (n /= 376 .and. n /= 200) error stop
44 if (n /= sizeof(avar)) error stop
45 if (n /= sizeof(cvar)) error stop
46 if (n * 5 /= sizeof(vara)) error stop
47 if (n * 5 /= sizeof(avara)) error stop
48 if (n * 5 /= sizeof(cvara)) error stop
50 if (n /= sz_ar(var,var,var,var)) error stop
51 if (n /= sz_s(var,var)) error stop
52 if (n /= sz_t3(var,var,var,var)) error stop
53 if (n /= sz_ar(avar,avar,avar,avar)) error stop
54 if (n /= sz_s(avar,avar)) error stop
55 if (n /= sz_t3(avar,avar,avar,avar)) error stop
56 if (n /= sz_t3_at(avar,avar)) error stop
57 if (n /= sz_ar(cvar,cvar,cvar,cvar)) error stop
58 if (n /= sz_s(cvar,cvar)) error stop
59 if (n /= sz_t3(cvar,cvar,cvar,cvar)) error stop
60 if (n /= sz_t3_a(cvar,cvar)) error stop
62 if (n*5 /= sz_ar(vara,vara,vara,vara)) error stop
63 if (n*5 /= sz_r1(vara,vara,vara,vara)) error stop
64 if (n*5 /= sz_t3(vara,vara,vara,vara)) error stop
65 if (n*5 /= sz_ar(avara,avara,avara,avara)) error stop
66 if (n*5 /= sz_r1(avara,avara,avara,avara)) error stop
67 if (n*5 /= sz_t3(avara,avara,avara,avara)) error stop
68 if (n*5 /= sz_t3_at(avara,avara)) error stop
69 if (n*5 /= sz_ar(cvara,cvara,cvara,cvara)) error stop
70 if (n*5 /= sz_r1(cvara,cvara,cvara,cvara)) error stop
71 if (n*5 /= sz_t3(cvara,cvara,cvara,cvara)) error stop
72 if (n*5 /= sz_t3_a(cvara,cvara)) error stop
74 allocate (var%ct2, var%ct2a(5,4,2), var%tt2, var%tt2a(5,4,2), var%ii, var%iia(5,3,2))
75 allocate (avar%ct2, avar%ct2a(5,4,2), avar%tt2, avar%tt2a(5,4,2), avar%ii, avar%iia(5,3,2))
76 allocate (cvar%ct2, cvar%ct2a(5,4,2), cvar%tt2, cvar%tt2a(5,4,2), cvar%ii, cvar%iia(5,3,2))
77 allocate (vara(1)%ct2, vara(1)%ct2a(5,4,2), vara(1)%tt2, vara(1)%tt2a(5,4,2), vara(1)%ii, vara(1)%iia(5,3,2))
78 allocate (avara(1)%ct2, avara(1)%ct2a(5,4,2), avara(1)%tt2, avara(1)%tt2a(5,4,2), avara(1)%ii, avara(1)%iia(5,3,2))
79 allocate (cvara(1)%ct2, cvara(1)%ct2a(5,4,2), cvara(1)%tt2, cvara(1)%tt2a(5,4,2), cvara(1)%ii, cvara(1)%iia(5,3,2))
80 allocate (ax, axa(5,4,2), cx, cxa(5,4,2))
82 ! Should be still be the same
83 if (n /= sizeof(avar)) error stop
84 if (n /= sizeof(cvar)) error stop
85 if (n * 5 /= sizeof(vara)) error stop
86 if (n * 5 /= sizeof(avara)) error stop
87 if (n * 5 /= sizeof(cvara)) error stop
89 if (n /= sz_ar(var,var,var,var)) error stop
90 if (n /= sz_s(var,var)) error stop
91 if (n /= sz_t3(var,var,var,var)) error stop
92 if (n /= sz_ar(avar,avar,avar,avar)) error stop
93 if (n /= sz_s(avar,avar)) error stop
94 if (n /= sz_t3(avar,avar,avar,avar)) error stop
95 if (n /= sz_t3_at(avar,avar)) error stop
96 if (n /= sz_ar(cvar,cvar,cvar,cvar)) error stop
97 if (n /= sz_s(cvar,cvar)) error stop
98 if (n /= sz_t3(cvar,cvar,cvar,cvar)) error stop
99 if (n /= sz_t3_a(cvar,cvar)) error stop
101 if (n*5 /= sz_ar(vara,vara,vara,vara)) error stop
102 if (n*5 /= sz_r1(vara,vara,vara,vara)) error stop
103 if (n*5 /= sz_t3(vara,vara,vara,vara)) error stop
104 if (n*5 /= sz_ar(avara,avara,avara,avara)) error stop
105 if (n*5 /= sz_r1(avara,avara,avara,avara)) error stop
106 if (n*5 /= sz_t3(avara,avara,avara,avara)) error stop
107 if (n*5 /= sz_t3_at(avara,avara)) error stop
108 if (n*5 /= sz_ar(cvara,cvara,cvara,cvara)) error stop
109 if (n*5 /= sz_r1(cvara,cvara,cvara,cvara)) error stop
110 if (n*5 /= sz_t3(cvara,cvara,cvara,cvara)) error stop
111 if (n*5 /= sz_t3_a(cvara,cvara)) error stop
113 ! This one did segfault before in gfc_conv_intrinsic_sizeof
114 n = sizeof(var%ct2)
115 if (n /= 112 .and. n /= 60) error stop
116 if (n /= sizeof (var%tt2)) error stop
117 if (n /= sizeof (avar%ct2)) error stop
118 if (n /= sizeof (avar%tt2)) error stop
119 if (n /= sizeof (cvar%ct2)) error stop
120 if (n /= sizeof (cvar%tt2)) error stop
121 if (n /= sizeof (vara(1)%tt2)) error stop
122 if (n /= sizeof (avara(1)%ct2)) error stop
123 if (n /= sizeof (avara(1)%tt2)) error stop
124 if (n /= sizeof (cvara(1)%ct2)) error stop
125 if (n /= sizeof (cvara(1)%tt2)) error stop
127 if (n /= sizeof (ax)) error stop
128 if (n /= sizeof (cx)) error stop
130 if (n /= sz_ar(var%ct2,var%ct2,var%ct2,var%ct2)) error stop
131 if (n /= sz_s(var%ct2,var%ct2)) error stop
132 if (n /= sz_t2(var%ct2,var%ct2,var%ct2,var%ct2,.false.)) error stop
133 if (n /= sz_t2_a(var%ct2,var%ct2)) error stop
134 if (n /= sz_ar(var%tt2,var%tt2,var%tt2,var%tt2)) error stop
135 if (n /= sz_s(var%tt2,var%tt2)) error stop
136 if (n /= sz_t2(var%tt2,var%tt2,var%tt2,var%tt2,.false.)) error stop
137 if (n /= sz_t2_at(var%tt2,var%tt2)) error stop
139 if (n*5*4*2 /= sizeof (var%tt2a)) error stop
140 if (n*5*4*2 /= sizeof (avar%ct2a)) error stop
141 if (n*5*4*2 /= sizeof (avar%tt2a)) error stop
142 if (n*5*4*2 /= sizeof (cvar%ct2a)) error stop
143 if (n*5*4*2 /= sizeof (cvar%tt2a)) error stop
144 if (n*5*4*2 /= sizeof (vara(1)%tt2a)) error stop
145 if (n*5*4*2 /= sizeof (avara(1)%ct2a)) error stop
146 if (n*5*4*2 /= sizeof (avara(1)%tt2a)) error stop
147 if (n*5*4*2 /= sizeof (cvara(1)%ct2a)) error stop
148 if (n*5*4*2 /= sizeof (cvara(1)%tt2a)) error stop
150 if (n*5*4*2 /= sizeof (axa)) error stop
151 if (n*5*4*2 /= sizeof (cxa)) error stop
153 if (n*5*4*2 /= sz_ar(var%ct2a,var%ct2a,var%ct2a,var%ct2a)) error stop
154 if (n*5*4*2 /= sz_r3(var%ct2a,var%ct2a,var%ct2a,var%ct2a)) error stop
155 if (n*5*4*2 /= sz_t2(var%ct2a,var%ct2a,var%ct2a,var%ct2a,.false.)) error stop
156 if (n*5*4*2 /= sz_t2_a(var%ct2a,var%ct2a)) error stop
157 if (n*5*4*2 /= sz_ar(var%tt2a,var%tt2a,var%tt2a,var%tt2a)) error stop
158 if (n*5*4*2 /= sz_r3(var%tt2a,var%tt2a,var%tt2a,var%tt2a)) error stop
159 if (n*5*4*2 /= sz_t2(var%tt2a,var%tt2a,var%tt2a,var%tt2a,.false.)) error stop
160 if (n*5*4*2 /= sz_t2_at(var%tt2a,var%tt2a)) error stop
162 n = sizeof(var%ii)
163 if (n /= 4) error stop
164 if (n /= sizeof (var%ii)) error stop
165 if (n /= sizeof (avar%ii)) error stop
166 if (n /= sizeof (avar%ii)) error stop
167 if (n /= sizeof (cvar%ii)) error stop
168 if (n /= sizeof (cvar%ii)) error stop
169 if (n /= sizeof (vara(1)%ii)) error stop
170 if (n /= sizeof (avara(1)%ii)) error stop
171 if (n /= sizeof (avara(1)%ii)) error stop
172 if (n /= sizeof (cvara(1)%ii)) error stop
173 if (n /= sizeof (cvara(1)%ii)) error stop
175 if (n*5*3*2 /= sizeof (var%iia)) error stop
176 if (n*5*3*2 /= sizeof (avar%iia)) error stop
177 if (n*5*3*2 /= sizeof (avar%iia)) error stop
178 if (n*5*3*2 /= sizeof (cvar%iia)) error stop
179 if (n*5*3*2 /= sizeof (cvar%iia)) error stop
180 if (n*5*3*2 /= sizeof (vara(1)%iia)) error stop
181 if (n*5*3*2 /= sizeof (avara(1)%iia)) error stop
182 if (n*5*3*2 /= sizeof (avara(1)%iia)) error stop
183 if (n*5*3*2 /= sizeof (cvara(1)%iia)) error stop
184 if (n*5*3*2 /= sizeof (cvara(1)%iia)) error stop
186 deallocate (var%ct2, var%ct2a, var%tt2, var%tt2a, var%ii, var%iia)
187 deallocate (avar%ct2, avar%ct2a, avar%tt2, avar%tt2a, avar%ii, avar%iia)
188 deallocate (cvar%ct2, cvar%ct2a, cvar%tt2, cvar%tt2a, cvar%ii, cvar%iia)
189 deallocate (vara(1)%ct2, vara(1)%ct2a, vara(1)%tt2, vara(1)%tt2a, vara(1)%ii, vara(1)%iia)
190 deallocate (avara(1)%ct2, avara(1)%ct2a, avara(1)%tt2, avara(1)%tt2a, avara(1)%ii, avara(1)%iia)
191 deallocate (cvara(1)%ct2, cvara(1)%ct2a, cvara(1)%tt2, cvara(1)%tt2a, cvara(1)%ii, cvara(1)%iia)
192 deallocate (ax, axa, cx, cxa)
194 allocate (t2e :: var%ct2, var%ct2a(5,4,2))
195 allocate (t2e :: avar%ct2, avar%ct2a(5,4,2))
196 allocate (t2e :: cvar%ct2, cvar%ct2a(5,4,2))
197 allocate (t2e :: vara(1)%ct2, vara(1)%ct2a(5,4,2))
198 allocate (t2e :: avara(1)%ct2, avara(1)%ct2a(5,4,2))
199 allocate (t2e :: cvara(1)%ct2, cvara(1)%ct2a(5,4,2))
200 allocate (t2e :: cx, cxa(5,4,2))
202 n = sizeof(cx)
203 if (n /= 144 .and. n /= 92) error stop
204 if (n /= sizeof(var%ct2)) error stop
205 if (n /= sizeof(avar%ct2)) error stop
206 if (n /= sizeof(cvar%ct2)) error stop
207 if (n /= sizeof(vara(1)%ct2)) error stop
208 if (n /= sizeof(avara(1)%ct2)) error stop
209 if (n /= sizeof(cvara(1)%ct2)) error stop
210 if (n*5*4*2 /= sizeof(cxa)) error stop
211 if (n*5*4*2 /= sizeof(var%ct2a)) error stop
212 if (n*5*4*2 /= sizeof(avar%ct2a)) error stop
213 if (n*5*4*2 /= sizeof(cvar%ct2a)) error stop
214 if (n*5*4*2 /= sizeof(vara(1)%ct2a)) error stop
215 if (n*5*4*2 /= sizeof(avara(1)%ct2a)) error stop
216 if (n*5*4*2 /= sizeof(cvara(1)%ct2a)) error stop
218 ! FAILS as declare not dynamic type arrives for TYPE(*),dimension(..)
219 ! -> FIXME, PR fortran/104844 (trice)
220 !if (n /= sz_ar(var%ct2,var%ct2,var%ct2,var%ct2)) error stop ! FIXME
221 if (n /= sz_s(var%ct2,var%ct2)) error stop
222 if (n /= sz_t2(var%ct2,var%ct2,var%ct2,var%ct2,.true.)) error stop
223 if (n /= sz_t2_a(var%ct2,var%ct2)) error stop
224 !if (n*5*4*2 /= sz_ar(var%ct2a,var%ct2a,var%ct2a,var%ct2a)) error stop ! FIXME
225 !if (n*5*4*2 /= sz_r3(var%ct2a,var%ct2a,var%ct2a,var%ct2a)) error stop ! FIXME
226 if (n*5*4*2 /= sz_t2(var%ct2a,var%ct2a,var%ct2a,var%ct2a,.true.)) error stop
227 if (n*5*4*2 /= sz_t2_a(var%ct2a,var%ct2a)) error stop
229 allocate (t :: var%ct2%d(3,2), var%ct2a(5,4,2)%d(3,2))
230 allocate (t :: avar%ct2%d(3,2), avar%ct2a(5,4,2)%d(3,2))
231 allocate (t :: cvar%ct2%d(3,2), cvar%ct2a(5,4,2)%d(3,2))
232 allocate (t :: vara(1)%ct2%d(3,2), vara(1)%ct2a(5,4,2)%d(3,2))
233 allocate (t :: avara(1)%ct2%d(3,2), avara(1)%ct2a(5,4,2)%d(3,2))
234 allocate (t :: cvara(1)%ct2%d(3,2), cvara(1)%ct2a(5,4,2)%d(3,2))
235 allocate (t :: cx%d(3,2), cxa(5,4,2)%d(3,2))
237 allocate (t :: var%ct2%e, var%ct2a(5,4,2)%e)
238 allocate (t :: avar%ct2%e, avar%ct2a(5,4,2)%e)
239 allocate (t :: cvar%ct2%e, cvar%ct2a(5,4,2)%e)
240 allocate (t :: vara(1)%ct2%e, vara(1)%ct2a(5,4,2)%e)
241 allocate (t :: avara(1)%ct2%e, avara(1)%ct2a(5,4,2)%e)
242 allocate (t :: cvara(1)%ct2%e, cvara(1)%ct2a(5,4,2)%e)
243 allocate (t :: cx%e, cxa(5,4,2)%e)
245 n = sizeof(cx%e)
246 if (n /= 144 .and. n /= 88) error stop
247 if (n /= sizeof(var%ct2%e)) error stop
248 if (n /= sizeof(var%ct2a(5,4,2)%e)) error stop
249 if (n /= sizeof(avar%ct2%e)) error stop
250 if (n /= sizeof(avar%ct2a(5,4,2)%e)) error stop
251 if (n /= sizeof(cvar%ct2%e)) error stop
252 if (n /= sizeof(cvar%ct2a(5,4,2)%e)) error stop
253 if (n /= sizeof(avara(1)%ct2%e)) error stop
254 if (n /= sizeof(avara(1)%ct2a(5,4,2)%e)) error stop
255 if (n /= sizeof(cvara(1)%ct2%e)) error stop
256 if (n /= sizeof(cvara(1)%ct2a(5,4,2)%e)) error stop
258 if (n /= sz_ar(var%ct2%e,var%ct2a(5,3,2)%e,cvar%ct2%e,cvar%ct2a(5,3,2)%e)) error stop
259 if (n /= sz_s(var%ct2%e,var%ct2a(5,3,2)%e)) error stop
260 if (n /= sz_t(var%ct2%e,var%ct2a(5,3,2)%e,cvar%ct2%e,cvar%ct2a(5,3,2)%e)) error stop
261 if (n /= sz_t_a(var%ct2%e,var%ct2a(5,3,2)%e)) error stop
263 ! FIXME - all of the following fail as size(... % ct2a(5,3,2) % d) == 0 instead of 6
264 ! See PR fortran/104845
265 !if (n*3*2 /= sz_ar(var%ct2%d,var%ct2a(5,3,2)%d,cvar%ct2%d,cvar%ct2a(5,3,2)%d)) error stop
266 !if (n*3*2 /= sz_r2(var%ct2%d,var%ct2a(5,3,2)%d,cvar%ct2%d,cvar%ct2a(5,3,2)%d)) error stop
267 !if (n*3*2 /= sz_t(var%ct2%d,var%ct2a(5,3,2)%d,cvar%ct2%d,cvar%ct2a(5,3,2)%d)) error stop
268 !if (n*3*2 /= sz_t_a(var%ct2%d,var%ct2a(5,3,2)%d)) error stop
270 if (n*3*2 /= sizeof(var%ct2%d)) error stop
271 if (n*3*2 /= sizeof(var%ct2a(5,4,2)%d)) error stop
272 if (n*3*2 /= sizeof(avar%ct2%d)) error stop
273 if (n*3*2 /= sizeof(avar%ct2a(5,4,2)%d)) error stop
274 if (n*3*2 /= sizeof(cvar%ct2%d)) error stop
275 if (n*3*2 /= sizeof(cvar%ct2a(5,4,2)%d)) error stop
276 if (n*3*2 /= sizeof(avara(1)%ct2%d)) error stop
277 if (n*3*2 /= sizeof(avara(1)%ct2a(5,4,2)%d)) error stop
278 if (n*3*2 /= sizeof(cvara(1)%ct2%d)) error stop
279 if (n*3*2 /= sizeof(cvara(1)%ct2a(5,4,2)%d)) error stop
281 deallocate (var%ct2, var%ct2a)
282 deallocate (avar%ct2, avar%ct2a)
283 deallocate (cvar%ct2, cvar%ct2a)
284 deallocate (cx, cxa)
286 deallocate (avar, avara)
287 deallocate (cvar, cvara)
289 contains
290 integer(c_size_t) function sz_ar (a, b, c, d) result(res)
291 type(*) :: a(..), c(..)
292 class(*) :: b(..), d(..)
293 optional :: c, d
294 res = sizeof(a)
295 if (sizeof(b) /= res) error stop
296 if (sizeof(c) /= res) error stop
297 if (sizeof(d) /= res) error stop
299 integer(c_size_t) function sz_ar_a (a, b) result(res)
300 class(*), allocatable :: a(..), b(..)
301 optional :: b
302 res = sizeof(a)
303 if (sizeof(b) /= res) error stop
305 integer(c_size_t) function sz_s (a, b) result(res)
306 class(*) :: a, b
307 optional :: b
308 res = sizeof(a)
309 if (sizeof(b) /= res) error stop
311 integer(c_size_t) function sz_s_a (a, b) result(res)
312 class(*), allocatable :: a, b
313 optional :: b
314 res = sizeof(a)
315 if (sizeof(b) /= res) error stop
317 integer(c_size_t) function sz_r1 (a, b, c, d) result(res)
318 type(*) :: a(:), c(:)
319 class(*) :: b(:), d(:)
320 optional :: c, d
321 res = sizeof(a)
322 if (sizeof(b) /= res) error stop
323 if (sizeof(c) /= res) error stop
324 if (sizeof(d) /= res) error stop
326 integer(c_size_t) function sz_r1_a (a, b) result(res)
327 class(*), allocatable :: a(:), b(:)
328 optional :: b
329 res = sizeof(a)
330 if (sizeof(b) /= res) error stop
332 integer(c_size_t) function sz_r2 (a, b, c, d) result(res)
333 type(*) :: a(:,:), c(:,:)
334 class(*) :: b(:,:), d(:,:)
335 optional :: c, d
336 res = sizeof(a)
337 if (sizeof(b) /= res) error stop
338 if (sizeof(c) /= res) error stop
339 if (sizeof(d) /= res) error stop
341 integer(c_size_t) function sz_r2_a (a, b) result(res)
342 class(*), allocatable :: a(:,:), b(:,:)
343 optional :: b
344 res = sizeof(a)
345 if (sizeof(b) /= res) error stop
347 integer(c_size_t) function sz_r3 (a, b, c, d) result(res)
348 type(*) :: a(:,:,:), c(:,:,:)
349 class(*) :: b(:,:,:), d(:,:,:)
350 optional :: c, d
351 res = sizeof(a)
352 if (sizeof(b) /= res) error stop
353 if (sizeof(c) /= res) error stop
354 if (sizeof(d) /= res) error stop
356 integer(c_size_t) function sz_r3_a (a, b) result(res)
357 class(*), allocatable :: a(:,:,:), b(:,:,:)
358 optional :: b
359 res = sizeof(a)
360 if (sizeof(b) /= res) error stop
362 integer(c_size_t) function sz_t (a, b, c, d) result(res)
363 type(t) :: a(..), c(..)
364 class(t) :: b(..), d(..)
365 optional :: c, d
367 res = sizeof(b)
368 if (sizeof(d) /= sizeof(b)) error stop
369 if (sizeof(a) /= sizeof(c)) error stop
370 if (sizeof(a) /= res) error stop
372 integer(c_size_t) function sz_t_a (a, b) result(res)
373 class(t), allocatable :: a(..), b(..)
374 optional :: b
376 res = sizeof(b)
377 if (sizeof(b) /= sizeof(a)) error stop
379 integer(c_size_t) function sz_t_at (a, b) result(res)
380 type(t), allocatable :: a(..), b(..)
381 optional :: b
383 res = sizeof(b)
384 if (sizeof(b) /= sizeof(a)) error stop
386 integer(c_size_t) function sz_t2 (a, b, c, d, extends) result(res)
387 type(t2) :: a(..), c(..)
388 class(t2) :: b(..), d(..)
389 optional :: c, d
390 logical, value :: extends
392 res = sizeof(b)
393 if (sizeof(d) /= sizeof(b)) error stop
394 if (sizeof(a) /= sizeof(c)) error stop
395 if (.not.extends) then
396 if (sizeof(a) /= res) error stop
397 else
398 ! Here, extension has extra elements
399 if (sizeof(a) >= res) error stop
400 end if
402 integer(c_size_t) function sz_t2_a (a, b) result(res)
403 class(t2), allocatable :: a(..), b(..)
404 optional :: b
406 res = sizeof(b)
407 if (sizeof(b) /= sizeof(a)) error stop
409 integer(c_size_t) function sz_t2_at (a, b) result(res)
410 type(t2), allocatable :: a(..), b(..)
411 optional :: b
413 res = sizeof(b)
414 if (sizeof(b) /= sizeof(a)) error stop
416 integer(c_size_t) function sz_t3 (a, b, c, d) result(res)
417 type(t3) :: a(..), c(..)
418 class(t3) :: b(..), d(..)
419 optional :: c, d
420 res = sizeof(b)
421 if (sizeof(d) /= sizeof(b)) error stop
422 if (sizeof(a) /= sizeof(c)) error stop
423 if (sizeof(a) /= res) error stop
425 integer(c_size_t) function sz_t3_a (a, b) result(res)
426 class(t3), allocatable :: a(..), b(..)
427 optional :: b
428 res = sizeof(b)
429 if (sizeof(a) /= sizeof(b)) error stop
431 integer(c_size_t) function sz_t3_at (a, b) result(res)
432 type(t3), allocatable :: a(..), b(..)
433 optional :: b
434 res = sizeof(b)
435 if (sizeof(a) /= sizeof(b)) error stop