52 lines
1.1 KiB
Fortran
52 lines
1.1 KiB
Fortran
! { dg-do run }
|
|
! Test procedures with allocatable dummy arguments
|
|
program alloc_dummy
|
|
|
|
implicit none
|
|
integer, allocatable :: a(:)
|
|
integer, allocatable :: b(:)
|
|
|
|
call init(a)
|
|
if (.NOT.allocated(a)) call abort()
|
|
if (.NOT.all(a == [ 1, 2, 3 ])) call abort()
|
|
|
|
call useit(a, b)
|
|
if (.NOT.all(b == [ 1, 2, 3 ])) call abort()
|
|
|
|
if (.NOT.all(whatever(a) == [ 1, 2, 3 ])) call abort()
|
|
|
|
call kill(a)
|
|
if (allocated(a)) call abort()
|
|
|
|
call kill(b)
|
|
if (allocated(b)) call abort()
|
|
|
|
contains
|
|
|
|
subroutine init(x)
|
|
integer, allocatable, intent(out) :: x(:)
|
|
allocate(x(3))
|
|
x = [ 1, 2, 3 ]
|
|
end subroutine init
|
|
|
|
subroutine useit(x, y)
|
|
integer, allocatable, intent(in) :: x(:)
|
|
integer, allocatable, intent(out) :: y(:)
|
|
if (allocated(y)) call abort()
|
|
call init(y)
|
|
y = x
|
|
end subroutine useit
|
|
|
|
function whatever(x)
|
|
integer, allocatable :: x(:)
|
|
integer :: whatever(size(x))
|
|
|
|
whatever = x
|
|
end function whatever
|
|
|
|
subroutine kill(x)
|
|
integer, allocatable, intent(out) :: x(:)
|
|
end subroutine kill
|
|
|
|
end program alloc_dummy
|