| ! { dg-do run} |
| |
| |
| ! PR fortran/99585 |
| |
| module m2 |
| type t |
| class(*), pointer :: bar(:) |
| end type |
| type t2 |
| class(t), allocatable :: my(:) |
| end type t2 |
| contains |
| function f (x, y) result(z) |
| class(t) :: x(:) |
| class(t) :: y(size(x(1)%bar)) |
| type(t) :: z(size(x(1)%bar)) |
| end |
| function g (x) result(z) |
| class(t) :: x(:) |
| type(t) :: z(size(x(1)%bar)) |
| end |
| subroutine s () |
| class(t2), allocatable :: a(:), b(:), c(:), d(:) |
| class(t2), pointer :: p(:) |
| c(1)%my = f (a(1)%my, b(1)%my) |
| d(1)%my = g (p(1)%my) |
| end |
| end |
| |
| ! Contributed by G. Steinmetz: |
| ! PR fortran/104430 |
| |
| module m |
| type t |
| integer :: a |
| end type |
| contains |
| function f(x) result(z) |
| class(t) :: x(:) |
| type(t) :: z(size(x%a)) |
| z%a = 42 |
| end |
| end |
| program p |
| use m |
| class(t), allocatable :: y(:), z(:) |
| allocate (y(32)) |
| z = f(y) |
| if (size(z) /= 32) stop 1 |
| if (any (z%a /= 42)) stop 2 |
| end |