1! { dg-do run }
2!
3! PR fortran/41850
4!
5module test_module
6  implicit none
7contains
8  subroutine sub2(a)
9    implicit none
10    real,allocatable,intent(out),optional :: a(:)
11    if(present(a)) then
12      if(allocated(a)) call abort()
13      allocate(a(1))
14      a(1) = 5
15    end if
16  end subroutine sub2
17  subroutine sub1(a)
18    implicit none
19    real,allocatable,intent(out),optional :: a(:)
20!    print *,'in sub1'
21    call sub2(a)
22    if(present(a)) then
23      if(a(1) /= 5) call abort()
24    end if
25  end subroutine sub1
26end module test_module
27
28program test
29  use test_module
30  implicit none
31  real, allocatable :: x(:)
32  allocate(x(1))
33  call sub1()
34  x = 8
35  call sub1(x)
36  if(x(1) /= 5) call abort()
37end program
38