2 ! PR libfortran/103634 - Runtime crash with PACK on zero-sized arrays
3 ! Exercise PACK intrinsic for cases when it calls pack_internal
10 type(t
), allocatable
:: new(:), old(:), vec(:)
11 logical, allocatable
:: mask(:)
14 m
= 0 ! failed with SIGSEGV in pack_internal
17 allocate (old(m
), mask(m
), vec(m
))
18 if (m
> 0) vec(m
)% r(1) = 42
24 if (size (pack (old
, mask
)) /= 0) stop 1
26 if (size (pack (old
, mask
)) /= m
) stop 2
27 new(:) = pack (old
, mask
) ! this used to segfault for m=0
30 if (size (pack (old
, mask
, vector
=vec
)) /= m
) stop 3
32 new(:) = pack (old
, mask
, vector
=vec
) ! this used to segfault for m=0
34 if ( new( m
)% r(1) /= 42) stop 4
35 if (any (new(:m
-1)% r(1) /= -99)) stop 5
38 if (m
> 0) mask(m
) = .true
.
39 if (size (pack (old
, mask
, vector
=vec
)) /= m
) stop 6
41 new(:) = pack (old
, mask
, vector
=vec
) ! this used to segfault for m=0
43 if (new(1)% r(1) /= -99) stop 7
46 if (new(m
)% r(1) /= 42) stop 8
49 if (size (pack (old(:0), mask(:0), vector
=vec
)) /= m
) stop 9
51 new(:) = pack (old(:0), mask(:0), vector
=vec
) ! did segfault for m=0
53 if (new(m
)% r(1) /= 42) stop 10
55 deallocate (old
, mask
, new
, vec
)