111
|
1 ! { dg-do compile }
|
|
2 ! { dg-options "-fdump-tree-original" }
|
|
3 !
|
|
4 ! PR fortran/37336
|
|
5 !
|
|
6 module m
|
|
7 type t
|
|
8 contains
|
|
9 final :: fini
|
|
10 end type t
|
|
11 type t2
|
|
12 integer :: ii
|
|
13 type(t), allocatable :: aa
|
|
14 type(t), allocatable :: bb(:)
|
|
15 class(t), allocatable :: cc
|
|
16 class(t), allocatable :: dd(:)
|
|
17 end type t2
|
|
18 integer, save :: cnt = -1
|
|
19 contains
|
|
20 subroutine fini(x)
|
|
21 type(t) :: x
|
131
|
22 if (cnt == -1) STOP 1
|
111
|
23 cnt = cnt + 1
|
|
24 end subroutine fini
|
|
25 end module m
|
|
26
|
|
27 use m
|
|
28 block
|
|
29 type(t2) :: y
|
|
30 y%ii = 123
|
|
31 end block
|
|
32 end
|
|
33
|
|
34 ! { dg-final { scan-tree-dump-times "if \\(y.aa != 0B\\)" 2 "original" } }
|
|
35 ! { dg-final { scan-tree-dump-times "if \\(y.cc._data != 0B\\)" 2 "original" } }
|
|
36 ! { dg-final { scan-tree-dump-times "if \\(\\(struct t\\\[0:\\\] . restrict\\) y.bb.data != 0B\\)" 2 "original" } }
|
|
37 ! { dg-final { scan-tree-dump-times "if \\(\\(struct t\\\[0:\\\] . restrict\\) y.dd._data.data != 0B\\)" 2 "original" } }
|
|
38
|
|
39 ! { dg-final { scan-tree-dump-times "desc.\[0-9\]+.data = \\(void . restrict\\) y.aa;" 1 "original" } }
|
|
40 ! { dg-final { scan-tree-dump-times "desc.\[0-9\]+.data = \\(void . restrict\\) y.cc._data;" 1 "original" } }
|
|
41
|
|
42 ! { dg-final { scan-tree-dump-times "__final_m_T \\(&desc.\[0-9\]+, 0, 1\\);" 1 "original" } }
|
|
43 ! { dg-final { scan-tree-dump-times "__final_m_T \\(&y.bb, 0, 1\\);" 1 "original" } }
|
|
44 ! { dg-final { scan-tree-dump "y.cc._vptr->_final \\(&desc.\[0-9\]+, (\\(integer\\(kind=8\\)\\) )?y.cc._vptr->_size, 1\\);" "original" } }
|
|
45 ! { dg-final { scan-tree-dump "y.dd._vptr->_final \\(&y.dd._data, (\\(integer\\(kind=8\\)\\) )?y.dd._vptr->_size, 1\\);" "original" } }
|
|
46
|