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