| !{ dg-do run } |
| ! |
| ! Testcase for pr66927 |
| ! Contributed by Juergen Reuter <juergen.reuter@desy.de> |
| |
| module processes |
| implicit none |
| private |
| |
| type :: t1_t |
| real :: p = 0.0 |
| end type t1_t |
| |
| type :: t2_t |
| private |
| type(t1_t), dimension(:), allocatable :: p |
| contains |
| procedure :: func => t2_func |
| end type t2_t |
| |
| type, public :: t3_t |
| type(t2_t), public :: int_born |
| end type t3_t |
| |
| public :: evaluate |
| |
| contains |
| |
| function t2_func (int) result (p) |
| class(t2_t), intent(in) :: int |
| type(t1_t), dimension(:), allocatable :: p |
| allocate(p(5)) |
| end function t2_func |
| |
| subroutine evaluate (t3) |
| class(t3_t), intent(inout) :: t3 |
| type(t1_t), dimension(:), allocatable :: p_born |
| allocate (p_born(1:size(t3%int_born%func ())), & |
| source = t3%int_born%func ()) |
| if (.not. allocated(p_born)) STOP 1 |
| if (size(p_born) /= 5) STOP 2 |
| end subroutine evaluate |
| |
| end module processes |
| |
| program pr66927 |
| use processes |
| type(t3_t) :: o |
| call evaluate(o) |
| end |
| |