aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gfortran.dg/transfer_class_2.f90
blob: d75b640f10f96e1fa047cc56cc8929b6927d64f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
! { dg-do run }
!
! PR 54917: [OOP] TRANSFER on polymorphic variable causes ICE
!
! Contributed by Janus Weil <janus@gcc.gnu.org>

module m
  implicit none
  type test_type
    integer :: i = 0
  contains
    procedure :: ass
    generic :: assignment(=) => ass
  end type
contains
  subroutine ass (a, b)
    class(test_type), intent(out) :: a
    class(test_type), intent(in)  :: b
    a%i = b%i
  end subroutine
end module


program p
  use m
  implicit none

  class(test_type), allocatable :: c
  type(test_type) :: t

  allocate(c)

  ! (1) check CLASS-to-TYPE transfer
  c%i=3
  t = transfer(c, t)
  if (t%i /= 3) call abort()

  ! (2) check TYPE-to-CLASS transfer
  t%i=4
  c = transfer(t, c)
  if (c%i /= 4) call abort()

end

! { dg-final { cleanup-modules "m" } }