! { dg-do run } ! ! Check that allocate with source for arrays without array-spec ! works. ! PR fortran/44672 ! Contributed by Tobias Burnus ! Antony Lewis ! Andre Vehreschild ! program allocate_with_source_6 type P class(*), allocatable :: X(:,:) end type type t end type t type(t), allocatable :: a(:), b, c(:) integer :: num_params_used = 6 integer, allocatable :: m(:) allocate(b,c(5)) allocate(a(5), source=b) deallocate(a) allocate(a, source=c) allocate(m, source=[(I, I=1, num_params_used)]) if (any(m /= [(I, I=1, num_params_used)])) STOP 1 deallocate(a,b,m) call testArrays() contains subroutine testArrays() type L class(*), allocatable :: v(:) end type Type(P) Y type(L) o real arr(3,5) real, allocatable :: v(:) arr = 5 allocate(Y%X, source=arr) select type (R => Y%X) type is (real) if (any(reshape(R, [15]) /= [5,5,5,5,5, 5,5,5,5,5, 5,5,5,5,5])) & STOP 2 class default STOP 3 end select deallocate(Y%X) allocate(Y%X, source=arr(2:3,3:4)) select type (R => Y%X) type is (real) if (any(reshape(R, [4]) /= [5,5,5,5])) & STOP 4 class default STOP 5 end select deallocate(Y%X) allocate(o%v, source=arr(2,3:4)) select type (R => o%v) type is (real) if (any(R /= [5,5])) & STOP 6 class default STOP 7 end select deallocate(o%v) allocate(v, source=arr(2,1:5)) if (any(v /= [5,5,5,5,5])) STOP 8 deallocate(v) end subroutine testArrays end