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