1! { dg-do compile }
2! { dg-options "-fdump-tree-original" }
3!
4! PR fortran/37336
5!
6! Finalize nonallocatable INTENT(OUT)
7!
8module m
9  type t
10  end type t
11  type t2
12  contains
13    final :: fini
14  end type t2
15contains
16  elemental subroutine fini(var)
17    type(t2), intent(inout) :: var
18  end subroutine fini
19end module m
20
21subroutine foo(x,y,aa,bb)
22  use m
23  class(t), intent(out) :: x(:),y
24  type(t2), intent(out) :: aa(:),bb
25end subroutine foo
26
27! Finalize CLASS + set default init
28! { dg-final { scan-tree-dump-times "y->_vptr->_final \\(&desc.\[0-9\]+, y->_vptr->_size, 0\\);" 1 "original" } }
29! { dg-final { scan-tree-dump       "__builtin_memcpy \\(\\(void .\\) y->_data, \\(void .\\) y->_vptr->_def_init, \\((unsigned long|unsigned int|character\\(kind=4\\))\\) y->_vptr->_size\\);" "original" } }
30! { dg-final { scan-tree-dump-times "x->_vptr->_final \\(&x->_data, x->_vptr->_size, 0\\);" 1 "original" } }
31! { dg-final { scan-tree-dump-times "x->_vptr->_copy \\(x->_vptr->_def_init, &x->_data\\);" 1 "original" } }
32
33! FINALIZE TYPE:
34! { dg-final { scan-tree-dump-times "parm.\[0-9\]+.data = \\(void \\*\\) &\\(\\*aa.\[0-9\]+\\)\\\[0\\\];" 1 "original" } }
35! { dg-final { scan-tree-dump-times "__final_m_T2 \\(&parm.\[0-9\]+, 0, 0\\);" 1 "original" } }
36! { dg-final { scan-tree-dump-times "desc.\[0-9\]+.data = \\(void \\* restrict\\) bb;" 1 "original" } }
37! { dg-final { scan-tree-dump-times "__final_m_T2 \\(&desc.\[0-9\]+, 0, 0\\);" 1 "original" } }
38
39! { dg-final { cleanup-tree-dump "original" } }
40