view gcc/testsuite/gfortran.dg/class_array_14.f90 @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
line wrap: on
line source

! { dg-do run }
!
! PR fortran/54618
!
! Check whether default initialization works with INTENT(OUT)
! and ALLOCATABLE and no segfault occurs with OPTIONAL.
!

subroutine test1()
  type typ1
    integer :: i = 6
  end type typ1

  type(typ1) :: x

  x%i = 77
  call f(x)
  if (x%i /= 6) STOP 1
  call f()
contains
  subroutine f(y1)
    class(typ1), intent(out), optional :: y1
  end subroutine f
end subroutine test1

subroutine test2()
  type mytype
  end type mytype
  type, extends(mytype):: mytype2
  end type mytype2

  class(mytype), allocatable :: x,y
  allocate (mytype2 :: x)
  call g(x)
  if (allocated (x) .or. .not. same_type_as (x,y)) STOP 2

  allocate (mytype2 :: x)
  call h(x)
  if (allocated (x) .or. .not. same_type_as (x,y)) STOP 3

  call h()
contains
  subroutine g(y2)
    class(mytype), intent(out), allocatable :: y2
  end subroutine g
  subroutine h(y3)
    class(mytype), optional, intent(out), allocatable :: y3
  end subroutine h
end subroutine test2

call test1()
call test2()
end