annotate gcc/testsuite/gfortran.dg/allocate_with_source_15.f03 @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ! { dg-do run }
kono
parents:
diff changeset
2 !
kono
parents:
diff changeset
3 ! Tests the fix for PR67933, which was a side effect of the fix for PR67171.
kono
parents:
diff changeset
4 !
kono
parents:
diff changeset
5 ! Contributed by Andrew <mandrew9@vt.edu>
kono
parents:
diff changeset
6 !
kono
parents:
diff changeset
7 module test_mod
kono
parents:
diff changeset
8 implicit none
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 type :: class_t
kono
parents:
diff changeset
11 integer :: i
kono
parents:
diff changeset
12 end type class_t
kono
parents:
diff changeset
13
kono
parents:
diff changeset
14 type, extends(class_t) :: class_e
kono
parents:
diff changeset
15 real :: r
kono
parents:
diff changeset
16 end type class_e
kono
parents:
diff changeset
17
kono
parents:
diff changeset
18 type :: wrapper_t
kono
parents:
diff changeset
19 class(class_t), allocatable :: class_var
kono
parents:
diff changeset
20 ! type(class_t), allocatable :: class_var
kono
parents:
diff changeset
21 ! integer, allocatable :: class_id
kono
parents:
diff changeset
22 end type wrapper_t
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 type :: list_t
kono
parents:
diff changeset
25 type(wrapper_t) :: classes(20)
kono
parents:
diff changeset
26 contains
kono
parents:
diff changeset
27 procedure :: Method
kono
parents:
diff changeset
28 procedure :: Typeme
kono
parents:
diff changeset
29 procedure :: Dealloc
kono
parents:
diff changeset
30 end type list_t
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 contains
kono
parents:
diff changeset
33 subroutine Method(this)
kono
parents:
diff changeset
34 class(list_t) :: this
kono
parents:
diff changeset
35 integer :: i
kono
parents:
diff changeset
36 do i = 1, 20
kono
parents:
diff changeset
37 if (i .gt. 10) then
kono
parents:
diff changeset
38 allocate (this%classes(i)%class_var, source = class_t (i))
kono
parents:
diff changeset
39 else
kono
parents:
diff changeset
40 allocate (this%classes(i)%class_var, source = class_e (i, real (2 * i)))
kono
parents:
diff changeset
41 end if
kono
parents:
diff changeset
42 end do
kono
parents:
diff changeset
43 end subroutine Method
kono
parents:
diff changeset
44 subroutine Dealloc(this)
kono
parents:
diff changeset
45 class(list_t) :: this
kono
parents:
diff changeset
46 integer :: i
kono
parents:
diff changeset
47 do i = 1, 20
kono
parents:
diff changeset
48 if (allocated (this%classes(i)%class_var)) &
kono
parents:
diff changeset
49 deallocate (this%classes(i)%class_var)
kono
parents:
diff changeset
50 end do
kono
parents:
diff changeset
51 end subroutine Dealloc
kono
parents:
diff changeset
52 subroutine Typeme(this)
kono
parents:
diff changeset
53 class(list_t) :: this
kono
parents:
diff changeset
54 integer :: i, j(20)
kono
parents:
diff changeset
55 real :: r(20)
kono
parents:
diff changeset
56 real :: zero = 0.0
kono
parents:
diff changeset
57 do i = 1, 20
kono
parents:
diff changeset
58 j(i) = this%classes(i)%class_var%i
kono
parents:
diff changeset
59 select type (p => this%classes(i)%class_var)
kono
parents:
diff changeset
60 type is (class_e)
kono
parents:
diff changeset
61 r(i) = p%r
kono
parents:
diff changeset
62 class default
kono
parents:
diff changeset
63 r(i) = zero
kono
parents:
diff changeset
64 end select
kono
parents:
diff changeset
65 end do
kono
parents:
diff changeset
66 ! print "(10i6,/)", j
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
67 if (any (j .ne. [(i, i = 1,20)])) STOP 1
111
kono
parents:
diff changeset
68 ! print "(10f6.2,/)", r
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
69 if (any (r(1:10) .ne. [(real (2 * i), i = 1,10)])) STOP 2
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
70 if (any (r(11:20) .ne. zero)) STOP 3
111
kono
parents:
diff changeset
71 end subroutine Typeme
kono
parents:
diff changeset
72 end module test_mod
kono
parents:
diff changeset
73
kono
parents:
diff changeset
74 use test_mod
kono
parents:
diff changeset
75 type(list_t) :: x
kono
parents:
diff changeset
76 call x%Method
kono
parents:
diff changeset
77 call x%Typeme
kono
parents:
diff changeset
78 call x%dealloc
kono
parents:
diff changeset
79 end