3 ! Check that sizeof is properly handled
6 implicit none (type, external)
9 integer, allocatable
:: a(:,:,:), aa
14 class(t
), allocatable
:: d(:,:), e
17 type, extends(t2
) :: t2e
22 class(t2
), allocatable
:: ct2
, ct2a(:,:,:)
23 type(t2
), allocatable
:: tt2
, tt2a(:,:,:)
24 integer, allocatable
:: ii
, iia(:,:,:)
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))
40 ! Assume alignment plays no tricks and system has 32bit/64bit.
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
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
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))
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
)
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
)
286 deallocate (avar
, avara
)
287 deallocate (cvar
, cvara
)
290 integer(c_size_t
) function sz_ar (a
, b
, c
, d
) result(res
)
291 type(*) :: a(..), c(..)
292 class(*) :: b(..), d(..)
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(..)
303 if (sizeof(b
) /= res
) error
stop
305 integer(c_size_t
) function sz_s (a
, b
) result(res
)
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
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(:)
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(:)
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(:,:)
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(:,:)
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(:,:,:)
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(:,:,:)
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(..)
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(..)
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(..)
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(..)
390 logical, value
:: extends
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
398 ! Here, extension has extra elements
399 if (sizeof(a
) >= res
) error
stop
402 integer(c_size_t
) function sz_t2_a (a
, b
) result(res
)
403 class(t2
), allocatable
:: a(..), 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(..)
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(..)
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(..)
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(..)
435 if (sizeof(a
) /= sizeof(b
)) error
stop