| ! { dg-do run } |
| ! |
| ! Check that sizeof is properly handled |
| ! |
| use iso_c_binding |
| implicit none (type, external) |
| |
| type t |
| integer, allocatable :: a(:,:,:), aa |
| integer :: b(5), c |
| end type t |
| |
| type t2 |
| class(t), allocatable :: d(:,:), e |
| end type t2 |
| |
| type, extends(t2) :: t2e |
| integer :: q(7), z |
| end type t2e |
| |
| type t3 |
| class(t2), allocatable :: ct2, ct2a(:,:,:) |
| type(t2), allocatable :: tt2, tt2a(:,:,:) |
| integer, allocatable :: ii, iia(:,:,:) |
| end type t3 |
| |
| type(t3) :: var, vara(5) |
| type(t3), allocatable :: avar, avara(:) |
| class(t3), allocatable :: cvar, cvara(:) |
| type(t2), allocatable :: ax, axa(:,:,:) |
| class(t2), allocatable :: cx, cxa(:,:,:) |
| |
| integer(c_size_t) :: n |
| |
| allocate (t3 :: avar, avara(5)) |
| allocate (t3 :: cvar, cvara(5)) |
| |
| n = sizeof(var) |
| |
| ! Assume alignment plays no tricks and system has 32bit/64bit. |
| ! If needed change |
| if (n /= 376 .and. n /= 200) error stop |
| |
| if (n /= sizeof(avar)) error stop |
| if (n /= sizeof(cvar)) error stop |
| if (n * 5 /= sizeof(vara)) error stop |
| if (n * 5 /= sizeof(avara)) error stop |
| if (n * 5 /= sizeof(cvara)) error stop |
| |
| if (n /= sz_ar(var,var,var,var)) error stop |
| if (n /= sz_s(var,var)) error stop |
| if (n /= sz_t3(var,var,var,var)) error stop |
| if (n /= sz_ar(avar,avar,avar,avar)) error stop |
| if (n /= sz_s(avar,avar)) error stop |
| if (n /= sz_t3(avar,avar,avar,avar)) error stop |
| if (n /= sz_t3_at(avar,avar)) error stop |
| if (n /= sz_ar(cvar,cvar,cvar,cvar)) error stop |
| if (n /= sz_s(cvar,cvar)) error stop |
| if (n /= sz_t3(cvar,cvar,cvar,cvar)) error stop |
| if (n /= sz_t3_a(cvar,cvar)) error stop |
| |
| if (n*5 /= sz_ar(vara,vara,vara,vara)) error stop |
| if (n*5 /= sz_r1(vara,vara,vara,vara)) error stop |
| if (n*5 /= sz_t3(vara,vara,vara,vara)) error stop |
| if (n*5 /= sz_ar(avara,avara,avara,avara)) error stop |
| if (n*5 /= sz_r1(avara,avara,avara,avara)) error stop |
| if (n*5 /= sz_t3(avara,avara,avara,avara)) error stop |
| if (n*5 /= sz_t3_at(avara,avara)) error stop |
| if (n*5 /= sz_ar(cvara,cvara,cvara,cvara)) error stop |
| if (n*5 /= sz_r1(cvara,cvara,cvara,cvara)) error stop |
| if (n*5 /= sz_t3(cvara,cvara,cvara,cvara)) error stop |
| if (n*5 /= sz_t3_a(cvara,cvara)) error stop |
| |
| allocate (var%ct2, var%ct2a(5,4,2), var%tt2, var%tt2a(5,4,2), var%ii, var%iia(5,3,2)) |
| allocate (avar%ct2, avar%ct2a(5,4,2), avar%tt2, avar%tt2a(5,4,2), avar%ii, avar%iia(5,3,2)) |
| allocate (cvar%ct2, cvar%ct2a(5,4,2), cvar%tt2, cvar%tt2a(5,4,2), cvar%ii, cvar%iia(5,3,2)) |
| 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)) |
| 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)) |
| 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)) |
| allocate (ax, axa(5,4,2), cx, cxa(5,4,2)) |
| |
| ! Should be still be the same |
| if (n /= sizeof(avar)) error stop |
| if (n /= sizeof(cvar)) error stop |
| if (n * 5 /= sizeof(vara)) error stop |
| if (n * 5 /= sizeof(avara)) error stop |
| if (n * 5 /= sizeof(cvara)) error stop |
| |
| if (n /= sz_ar(var,var,var,var)) error stop |
| if (n /= sz_s(var,var)) error stop |
| if (n /= sz_t3(var,var,var,var)) error stop |
| if (n /= sz_ar(avar,avar,avar,avar)) error stop |
| if (n /= sz_s(avar,avar)) error stop |
| if (n /= sz_t3(avar,avar,avar,avar)) error stop |
| if (n /= sz_t3_at(avar,avar)) error stop |
| if (n /= sz_ar(cvar,cvar,cvar,cvar)) error stop |
| if (n /= sz_s(cvar,cvar)) error stop |
| if (n /= sz_t3(cvar,cvar,cvar,cvar)) error stop |
| if (n /= sz_t3_a(cvar,cvar)) error stop |
| |
| if (n*5 /= sz_ar(vara,vara,vara,vara)) error stop |
| if (n*5 /= sz_r1(vara,vara,vara,vara)) error stop |
| if (n*5 /= sz_t3(vara,vara,vara,vara)) error stop |
| if (n*5 /= sz_ar(avara,avara,avara,avara)) error stop |
| if (n*5 /= sz_r1(avara,avara,avara,avara)) error stop |
| if (n*5 /= sz_t3(avara,avara,avara,avara)) error stop |
| if (n*5 /= sz_t3_at(avara,avara)) error stop |
| if (n*5 /= sz_ar(cvara,cvara,cvara,cvara)) error stop |
| if (n*5 /= sz_r1(cvara,cvara,cvara,cvara)) error stop |
| if (n*5 /= sz_t3(cvara,cvara,cvara,cvara)) error stop |
| if (n*5 /= sz_t3_a(cvara,cvara)) error stop |
| |
| ! This one did segfault before in gfc_conv_intrinsic_sizeof |
| n = sizeof(var%ct2) |
| if (n /= 112 .and. n /= 60) error stop |
| if (n /= sizeof (var%tt2)) error stop |
| if (n /= sizeof (avar%ct2)) error stop |
| if (n /= sizeof (avar%tt2)) error stop |
| if (n /= sizeof (cvar%ct2)) error stop |
| if (n /= sizeof (cvar%tt2)) error stop |
| if (n /= sizeof (vara(1)%tt2)) error stop |
| if (n /= sizeof (avara(1)%ct2)) error stop |
| if (n /= sizeof (avara(1)%tt2)) error stop |
| if (n /= sizeof (cvara(1)%ct2)) error stop |
| if (n /= sizeof (cvara(1)%tt2)) error stop |
| |
| if (n /= sizeof (ax)) error stop |
| if (n /= sizeof (cx)) error stop |
| |
| if (n /= sz_ar(var%ct2,var%ct2,var%ct2,var%ct2)) error stop |
| if (n /= sz_s(var%ct2,var%ct2)) error stop |
| if (n /= sz_t2(var%ct2,var%ct2,var%ct2,var%ct2,.false.)) error stop |
| if (n /= sz_t2_a(var%ct2,var%ct2)) error stop |
| if (n /= sz_ar(var%tt2,var%tt2,var%tt2,var%tt2)) error stop |
| if (n /= sz_s(var%tt2,var%tt2)) error stop |
| if (n /= sz_t2(var%tt2,var%tt2,var%tt2,var%tt2,.false.)) error stop |
| if (n /= sz_t2_at(var%tt2,var%tt2)) error stop |
| |
| if (n*5*4*2 /= sizeof (var%tt2a)) error stop |
| if (n*5*4*2 /= sizeof (avar%ct2a)) error stop |
| if (n*5*4*2 /= sizeof (avar%tt2a)) error stop |
| if (n*5*4*2 /= sizeof (cvar%ct2a)) error stop |
| if (n*5*4*2 /= sizeof (cvar%tt2a)) error stop |
| if (n*5*4*2 /= sizeof (vara(1)%tt2a)) error stop |
| if (n*5*4*2 /= sizeof (avara(1)%ct2a)) error stop |
| if (n*5*4*2 /= sizeof (avara(1)%tt2a)) error stop |
| if (n*5*4*2 /= sizeof (cvara(1)%ct2a)) error stop |
| if (n*5*4*2 /= sizeof (cvara(1)%tt2a)) error stop |
| |
| if (n*5*4*2 /= sizeof (axa)) error stop |
| if (n*5*4*2 /= sizeof (cxa)) error stop |
| |
| if (n*5*4*2 /= sz_ar(var%ct2a,var%ct2a,var%ct2a,var%ct2a)) error stop |
| if (n*5*4*2 /= sz_r3(var%ct2a,var%ct2a,var%ct2a,var%ct2a)) error stop |
| if (n*5*4*2 /= sz_t2(var%ct2a,var%ct2a,var%ct2a,var%ct2a,.false.)) error stop |
| if (n*5*4*2 /= sz_t2_a(var%ct2a,var%ct2a)) error stop |
| if (n*5*4*2 /= sz_ar(var%tt2a,var%tt2a,var%tt2a,var%tt2a)) error stop |
| if (n*5*4*2 /= sz_r3(var%tt2a,var%tt2a,var%tt2a,var%tt2a)) error stop |
| if (n*5*4*2 /= sz_t2(var%tt2a,var%tt2a,var%tt2a,var%tt2a,.false.)) error stop |
| if (n*5*4*2 /= sz_t2_at(var%tt2a,var%tt2a)) error stop |
| |
| n = sizeof(var%ii) |
| if (n /= 4) error stop |
| if (n /= sizeof (var%ii)) error stop |
| if (n /= sizeof (avar%ii)) error stop |
| if (n /= sizeof (avar%ii)) error stop |
| if (n /= sizeof (cvar%ii)) error stop |
| if (n /= sizeof (cvar%ii)) error stop |
| if (n /= sizeof (vara(1)%ii)) error stop |
| if (n /= sizeof (avara(1)%ii)) error stop |
| if (n /= sizeof (avara(1)%ii)) error stop |
| if (n /= sizeof (cvara(1)%ii)) error stop |
| if (n /= sizeof (cvara(1)%ii)) error stop |
| |
| if (n*5*3*2 /= sizeof (var%iia)) error stop |
| if (n*5*3*2 /= sizeof (avar%iia)) error stop |
| if (n*5*3*2 /= sizeof (avar%iia)) error stop |
| if (n*5*3*2 /= sizeof (cvar%iia)) error stop |
| if (n*5*3*2 /= sizeof (cvar%iia)) error stop |
| if (n*5*3*2 /= sizeof (vara(1)%iia)) error stop |
| if (n*5*3*2 /= sizeof (avara(1)%iia)) error stop |
| if (n*5*3*2 /= sizeof (avara(1)%iia)) error stop |
| if (n*5*3*2 /= sizeof (cvara(1)%iia)) error stop |
| if (n*5*3*2 /= sizeof (cvara(1)%iia)) error stop |
| |
| deallocate (var%ct2, var%ct2a, var%tt2, var%tt2a, var%ii, var%iia) |
| deallocate (avar%ct2, avar%ct2a, avar%tt2, avar%tt2a, avar%ii, avar%iia) |
| deallocate (cvar%ct2, cvar%ct2a, cvar%tt2, cvar%tt2a, cvar%ii, cvar%iia) |
| deallocate (vara(1)%ct2, vara(1)%ct2a, vara(1)%tt2, vara(1)%tt2a, vara(1)%ii, vara(1)%iia) |
| deallocate (avara(1)%ct2, avara(1)%ct2a, avara(1)%tt2, avara(1)%tt2a, avara(1)%ii, avara(1)%iia) |
| deallocate (cvara(1)%ct2, cvara(1)%ct2a, cvara(1)%tt2, cvara(1)%tt2a, cvara(1)%ii, cvara(1)%iia) |
| deallocate (ax, axa, cx, cxa) |
| |
| allocate (t2e :: var%ct2, var%ct2a(5,4,2)) |
| allocate (t2e :: avar%ct2, avar%ct2a(5,4,2)) |
| allocate (t2e :: cvar%ct2, cvar%ct2a(5,4,2)) |
| allocate (t2e :: vara(1)%ct2, vara(1)%ct2a(5,4,2)) |
| allocate (t2e :: avara(1)%ct2, avara(1)%ct2a(5,4,2)) |
| allocate (t2e :: cvara(1)%ct2, cvara(1)%ct2a(5,4,2)) |
| allocate (t2e :: cx, cxa(5,4,2)) |
| |
| n = sizeof(cx) |
| if (n /= 144 .and. n /= 92) error stop |
| if (n /= sizeof(var%ct2)) error stop |
| if (n /= sizeof(avar%ct2)) error stop |
| if (n /= sizeof(cvar%ct2)) error stop |
| if (n /= sizeof(vara(1)%ct2)) error stop |
| if (n /= sizeof(avara(1)%ct2)) error stop |
| if (n /= sizeof(cvara(1)%ct2)) error stop |
| if (n*5*4*2 /= sizeof(cxa)) error stop |
| if (n*5*4*2 /= sizeof(var%ct2a)) error stop |
| if (n*5*4*2 /= sizeof(avar%ct2a)) error stop |
| if (n*5*4*2 /= sizeof(cvar%ct2a)) error stop |
| if (n*5*4*2 /= sizeof(vara(1)%ct2a)) error stop |
| if (n*5*4*2 /= sizeof(avara(1)%ct2a)) error stop |
| if (n*5*4*2 /= sizeof(cvara(1)%ct2a)) error stop |
| |
| ! FAILS as declare not dynamic type arrives for TYPE(*),dimension(..) |
| ! -> FIXME, PR fortran/104844 (trice) |
| !if (n /= sz_ar(var%ct2,var%ct2,var%ct2,var%ct2)) error stop ! FIXME |
| if (n /= sz_s(var%ct2,var%ct2)) error stop |
| if (n /= sz_t2(var%ct2,var%ct2,var%ct2,var%ct2,.true.)) error stop |
| if (n /= sz_t2_a(var%ct2,var%ct2)) error stop |
| !if (n*5*4*2 /= sz_ar(var%ct2a,var%ct2a,var%ct2a,var%ct2a)) error stop ! FIXME |
| !if (n*5*4*2 /= sz_r3(var%ct2a,var%ct2a,var%ct2a,var%ct2a)) error stop ! FIXME |
| if (n*5*4*2 /= sz_t2(var%ct2a,var%ct2a,var%ct2a,var%ct2a,.true.)) error stop |
| if (n*5*4*2 /= sz_t2_a(var%ct2a,var%ct2a)) error stop |
| |
| allocate (t :: var%ct2%d(3,2), var%ct2a(5,4,2)%d(3,2)) |
| allocate (t :: avar%ct2%d(3,2), avar%ct2a(5,4,2)%d(3,2)) |
| allocate (t :: cvar%ct2%d(3,2), cvar%ct2a(5,4,2)%d(3,2)) |
| allocate (t :: vara(1)%ct2%d(3,2), vara(1)%ct2a(5,4,2)%d(3,2)) |
| allocate (t :: avara(1)%ct2%d(3,2), avara(1)%ct2a(5,4,2)%d(3,2)) |
| allocate (t :: cvara(1)%ct2%d(3,2), cvara(1)%ct2a(5,4,2)%d(3,2)) |
| allocate (t :: cx%d(3,2), cxa(5,4,2)%d(3,2)) |
| |
| allocate (t :: var%ct2%e, var%ct2a(5,4,2)%e) |
| allocate (t :: avar%ct2%e, avar%ct2a(5,4,2)%e) |
| allocate (t :: cvar%ct2%e, cvar%ct2a(5,4,2)%e) |
| allocate (t :: vara(1)%ct2%e, vara(1)%ct2a(5,4,2)%e) |
| allocate (t :: avara(1)%ct2%e, avara(1)%ct2a(5,4,2)%e) |
| allocate (t :: cvara(1)%ct2%e, cvara(1)%ct2a(5,4,2)%e) |
| allocate (t :: cx%e, cxa(5,4,2)%e) |
| |
| n = sizeof(cx%e) |
| if (n /= 144 .and. n /= 88) error stop |
| if (n /= sizeof(var%ct2%e)) error stop |
| if (n /= sizeof(var%ct2a(5,4,2)%e)) error stop |
| if (n /= sizeof(avar%ct2%e)) error stop |
| if (n /= sizeof(avar%ct2a(5,4,2)%e)) error stop |
| if (n /= sizeof(cvar%ct2%e)) error stop |
| if (n /= sizeof(cvar%ct2a(5,4,2)%e)) error stop |
| if (n /= sizeof(avara(1)%ct2%e)) error stop |
| if (n /= sizeof(avara(1)%ct2a(5,4,2)%e)) error stop |
| if (n /= sizeof(cvara(1)%ct2%e)) error stop |
| if (n /= sizeof(cvara(1)%ct2a(5,4,2)%e)) error stop |
| |
| if (n /= sz_ar(var%ct2%e,var%ct2a(5,3,2)%e,cvar%ct2%e,cvar%ct2a(5,3,2)%e)) error stop |
| if (n /= sz_s(var%ct2%e,var%ct2a(5,3,2)%e)) error stop |
| if (n /= sz_t(var%ct2%e,var%ct2a(5,3,2)%e,cvar%ct2%e,cvar%ct2a(5,3,2)%e)) error stop |
| if (n /= sz_t_a(var%ct2%e,var%ct2a(5,3,2)%e)) error stop |
| |
| ! FIXME - all of the following fail as size(... % ct2a(5,3,2) % d) == 0 instead of 6 |
| ! See PR fortran/104845 |
| !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 |
| !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 |
| !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 |
| !if (n*3*2 /= sz_t_a(var%ct2%d,var%ct2a(5,3,2)%d)) error stop |
| |
| if (n*3*2 /= sizeof(var%ct2%d)) error stop |
| if (n*3*2 /= sizeof(var%ct2a(5,4,2)%d)) error stop |
| if (n*3*2 /= sizeof(avar%ct2%d)) error stop |
| if (n*3*2 /= sizeof(avar%ct2a(5,4,2)%d)) error stop |
| if (n*3*2 /= sizeof(cvar%ct2%d)) error stop |
| if (n*3*2 /= sizeof(cvar%ct2a(5,4,2)%d)) error stop |
| if (n*3*2 /= sizeof(avara(1)%ct2%d)) error stop |
| if (n*3*2 /= sizeof(avara(1)%ct2a(5,4,2)%d)) error stop |
| if (n*3*2 /= sizeof(cvara(1)%ct2%d)) error stop |
| if (n*3*2 /= sizeof(cvara(1)%ct2a(5,4,2)%d)) error stop |
| |
| deallocate (var%ct2, var%ct2a) |
| deallocate (avar%ct2, avar%ct2a) |
| deallocate (cvar%ct2, cvar%ct2a) |
| deallocate (cx, cxa) |
| |
| deallocate (avar, avara) |
| deallocate (cvar, cvara) |
| |
| contains |
| integer(c_size_t) function sz_ar (a, b, c, d) result(res) |
| type(*) :: a(..), c(..) |
| class(*) :: b(..), d(..) |
| optional :: c, d |
| res = sizeof(a) |
| if (sizeof(b) /= res) error stop |
| if (sizeof(c) /= res) error stop |
| if (sizeof(d) /= res) error stop |
| end |
| integer(c_size_t) function sz_ar_a (a, b) result(res) |
| class(*), allocatable :: a(..), b(..) |
| optional :: b |
| res = sizeof(a) |
| if (sizeof(b) /= res) error stop |
| end |
| integer(c_size_t) function sz_s (a, b) result(res) |
| class(*) :: a, b |
| optional :: b |
| res = sizeof(a) |
| if (sizeof(b) /= res) error stop |
| end |
| integer(c_size_t) function sz_s_a (a, b) result(res) |
| class(*), allocatable :: a, b |
| optional :: b |
| res = sizeof(a) |
| if (sizeof(b) /= res) error stop |
| end |
| integer(c_size_t) function sz_r1 (a, b, c, d) result(res) |
| type(*) :: a(:), c(:) |
| class(*) :: b(:), d(:) |
| optional :: c, d |
| res = sizeof(a) |
| if (sizeof(b) /= res) error stop |
| if (sizeof(c) /= res) error stop |
| if (sizeof(d) /= res) error stop |
| end |
| integer(c_size_t) function sz_r1_a (a, b) result(res) |
| class(*), allocatable :: a(:), b(:) |
| optional :: b |
| res = sizeof(a) |
| if (sizeof(b) /= res) error stop |
| end |
| integer(c_size_t) function sz_r2 (a, b, c, d) result(res) |
| type(*) :: a(:,:), c(:,:) |
| class(*) :: b(:,:), d(:,:) |
| optional :: c, d |
| res = sizeof(a) |
| if (sizeof(b) /= res) error stop |
| if (sizeof(c) /= res) error stop |
| if (sizeof(d) /= res) error stop |
| end |
| integer(c_size_t) function sz_r2_a (a, b) result(res) |
| class(*), allocatable :: a(:,:), b(:,:) |
| optional :: b |
| res = sizeof(a) |
| if (sizeof(b) /= res) error stop |
| end |
| integer(c_size_t) function sz_r3 (a, b, c, d) result(res) |
| type(*) :: a(:,:,:), c(:,:,:) |
| class(*) :: b(:,:,:), d(:,:,:) |
| optional :: c, d |
| res = sizeof(a) |
| if (sizeof(b) /= res) error stop |
| if (sizeof(c) /= res) error stop |
| if (sizeof(d) /= res) error stop |
| end |
| integer(c_size_t) function sz_r3_a (a, b) result(res) |
| class(*), allocatable :: a(:,:,:), b(:,:,:) |
| optional :: b |
| res = sizeof(a) |
| if (sizeof(b) /= res) error stop |
| end |
| integer(c_size_t) function sz_t (a, b, c, d) result(res) |
| type(t) :: a(..), c(..) |
| class(t) :: b(..), d(..) |
| optional :: c, d |
| |
| res = sizeof(b) |
| if (sizeof(d) /= sizeof(b)) error stop |
| if (sizeof(a) /= sizeof(c)) error stop |
| if (sizeof(a) /= res) error stop |
| end |
| integer(c_size_t) function sz_t_a (a, b) result(res) |
| class(t), allocatable :: a(..), b(..) |
| optional :: b |
| |
| res = sizeof(b) |
| if (sizeof(b) /= sizeof(a)) error stop |
| end |
| integer(c_size_t) function sz_t_at (a, b) result(res) |
| type(t), allocatable :: a(..), b(..) |
| optional :: b |
| |
| res = sizeof(b) |
| if (sizeof(b) /= sizeof(a)) error stop |
| end |
| integer(c_size_t) function sz_t2 (a, b, c, d, extends) result(res) |
| type(t2) :: a(..), c(..) |
| class(t2) :: b(..), d(..) |
| optional :: c, d |
| logical, value :: extends |
| |
| res = sizeof(b) |
| if (sizeof(d) /= sizeof(b)) error stop |
| if (sizeof(a) /= sizeof(c)) error stop |
| if (.not.extends) then |
| if (sizeof(a) /= res) error stop |
| else |
| ! Here, extension has extra elements |
| if (sizeof(a) >= res) error stop |
| end if |
| end |
| integer(c_size_t) function sz_t2_a (a, b) result(res) |
| class(t2), allocatable :: a(..), b(..) |
| optional :: b |
| |
| res = sizeof(b) |
| if (sizeof(b) /= sizeof(a)) error stop |
| end |
| integer(c_size_t) function sz_t2_at (a, b) result(res) |
| type(t2), allocatable :: a(..), b(..) |
| optional :: b |
| |
| res = sizeof(b) |
| if (sizeof(b) /= sizeof(a)) error stop |
| end |
| integer(c_size_t) function sz_t3 (a, b, c, d) result(res) |
| type(t3) :: a(..), c(..) |
| class(t3) :: b(..), d(..) |
| optional :: c, d |
| res = sizeof(b) |
| if (sizeof(d) /= sizeof(b)) error stop |
| if (sizeof(a) /= sizeof(c)) error stop |
| if (sizeof(a) /= res) error stop |
| end |
| integer(c_size_t) function sz_t3_a (a, b) result(res) |
| class(t3), allocatable :: a(..), b(..) |
| optional :: b |
| res = sizeof(b) |
| if (sizeof(a) /= sizeof(b)) error stop |
| end |
| integer(c_size_t) function sz_t3_at (a, b) result(res) |
| type(t3), allocatable :: a(..), b(..) |
| optional :: b |
| res = sizeof(b) |
| if (sizeof(a) /= sizeof(b)) error stop |
| end |
| end |