| ! { dg-do run } |
| ! PR 25217: INTENT(OUT) dummies of derived type with default initializers shall |
| ! be (re)initialized upon procedure entry, unless they are ALLOCATABLE. |
| ! Modified to take account of the regression, identified by Martin Tees |
| ! http://gcc.gnu.org/ml/fortran/2006-08/msg00276.html and fixed with |
| ! PR 28788. |
| module dt |
| type :: drv |
| integer :: a(3) = [ 1, 2, 3 ] |
| character(3) :: s = "abc" |
| real, pointer :: p => null() |
| end type drv |
| end module dt |
| |
| module subs |
| contains |
| subroutine foo(fb) |
| use dt |
| type(drv), intent(out) :: fb |
| call sub (fb) |
| end subroutine foo |
| |
| subroutine sub(fa) |
| use dt |
| type(drv), intent(out) :: fa |
| |
| if (any(fa%a /= [ 1, 2, 3 ])) STOP 1 |
| if (fa%s /= "abc") STOP 2 |
| if (associated(fa%p)) STOP 3 |
| end subroutine sub |
| end module subs |
| |
| program main |
| use dt |
| use subs |
| implicit none |
| type(drv) :: aa |
| type(drv), allocatable :: ab(:) |
| real, target :: x = 99, y = 999 |
| |
| aa = drv ([ 4, 5, 6], "def", x) |
| call sub(aa) |
| |
| aa = drv ([ 7, 8, 9], "ghi", y) |
| call foo(aa) |
| end program main |
| |