1257251Skib! { dg-do run } 2257251Skib! Test procedures with allocatable dummy arguments 3257251Skibprogram alloc_dummy 4257251Skib 5257251Skib implicit none 6257251Skib integer, allocatable :: a(:) 7257251Skib integer, allocatable :: b(:) 8257251Skib 9257251Skib call init(a) 10257251Skib if (.NOT.allocated(a)) call abort() 11257251Skib if (.NOT.all(a == [ 1, 2, 3 ])) call abort() 12257251Skib 13257251Skib call useit(a, b) 14257251Skib if (.NOT.all(b == [ 1, 2, 3 ])) call abort() 15257251Skib 16257251Skib if (.NOT.all(whatever(a) == [ 1, 2, 3 ])) call abort() 17257251Skib 18257251Skib call kill(a) 19257251Skib if (allocated(a)) call abort() 20257251Skib 21257251Skib call kill(b) 22257251Skib if (allocated(b)) call abort() 23257251Skib 24257251Skibcontains 25257251Skib 26257251Skib subroutine init(x) 27257251Skib integer, allocatable, intent(out) :: x(:) 28257251Skib allocate(x(3)) 29257251Skib x = [ 1, 2, 3 ] 30257251Skib end subroutine init 31257251Skib 32257251Skib subroutine useit(x, y) 33257251Skib integer, allocatable, intent(in) :: x(:) 34257251Skib integer, allocatable, intent(out) :: y(:) 35257251Skib if (allocated(y)) call abort() 36257251Skib call init(y) 37257251Skib y = x 38257251Skib end subroutine useit 39257251Skib 40257251Skib function whatever(x) 41257251Skib integer, allocatable :: x(:) 42257251Skib integer :: whatever(size(x)) 43257251Skib 44257251Skib whatever = x 45257251Skib end function whatever 46257251Skib 47257251Skib subroutine kill(x) 48257251Skib integer, allocatable, intent(out) :: x(:) 49257251Skib end subroutine kill 50257251Skib 51257251Skibend program alloc_dummy 52257251Skib