<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/126391>126391</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Flang] Missing finalization on `MOVE_ALLOC`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
flang:runtime
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
DanielCChen
</td>
</tr>
</table>
<pre>
Consider the following code
```
module m
integer :: numA = 0, numB = 0
type A
integer :: iA
contains
final :: finalA
end type
type, extends(A) :: B
integer :: iB
type(A) :: x
contains
final :: finalB
end type
contains
subroutine finalA(a1)
type(A), intent(in) :: a1
numA = numA + 1
end subroutine
subroutine finalB(b1)
type(B), intent(in) :: b1
numB = numB + 1
end subroutine
end module
program main
use m
class(A), allocatable :: to(:)
class(B), allocatable :: from(:)
allocate(B :: to(1))
allocate(B :: from (0:-1) )
select type (to)
type is (B)
to(1) = B(iA = 101, iB = 102, x= A(11)) !! Finalize 'to' as of type B
end select
if ( numA /= 2 ) error stop 11
if ( numB /= 1 ) error stop 13
! to is rank-1 array
call move_alloc(from, to ) !! Finalize 'to' again as of type B
if ( numA /= 4 ) error stop 41
if ( numB /= 2 ) error stop 43
end
```
Flang currently failed at `error stop 41` because the counter of `finalA` is 3 instead of 4.
Polymorphic allocatable variable `to` has dynamic type of `B` at the point before `move_alloc` is called, so it should call `finalB` once more and `finalA` twice more.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycVcFy4ygQ_Rp86YoLkCJbBx0kZ32aqdnTXqeQhCx2EbgAZeL9-q0Wkq04cbZqXKkKCF6_97obEN6rk5GyIM8VeX7ZiDH01hUvwiipD4demk1t20txsMarVjoIvYTOam1_KXOCxraS0JJkdP6j5WDbUUsYCC0BAJQJ8iQdAElKkpRgxqEEkrwAJfyAs2qe0RIR4XKWUM7YNX6Gq_VaY00QyvjVJ_x1ygi9AKbJApKmnRhmMoA44weQb0Ga1hO-LwnPF3D1hZBqkXuHefsdgdVDgZ-E8GPt7BiUkYs7vheM8PyOZiUOLaIBEwjfK7OSK9gd6lqgOOAVrHegwBv_LPNeUEX4vn4sqPpSUD3RXRsjDv5PBX6IjRclEVqenT05McAglCG0HH3sySWtWni_So7Q2jYiiFrLRUiwhO9xfPWxgKrHoM7ZYQ2bkfPOyf27-FOWrgSfbcOIQPiekqR8YlOirpG91LIJ8dAQvseIt5xPX5WHRfAtfVfmKcNYLRVLziibClPNM46zNxxjj7FZbAxCOCOcwRELrv5F_h3G3YHwYLvIvm7rqPWWEtWhsqXLjkjC0RpI56wDH-wZGPuwuVo2sw-bk1twVBYsunfC_PPEQDgnLksZhdYw2Ff5c8o34ftYtQNCrv4-_z12fRLK3Ht_bDW9V59-YfVDXtKbVWnaueVXdzCh5VELvJ9H56QJ-gKdUFq2IAKQjL7nzSjUshF4QvB2b-xognRohGR0vmEyislMQBkfpGhxMd0CoeWfVl8G6869at6dh1fhVDwYGQ0W8b3w0F6MGFQTMxQJKlwTYaI-W2UC1LKzbgKuihQFYOlki6XyFlQA39tRt7Gii9gpoDWNhAHDCNO-9xF-qXltS2i5aYukzZNcbGTBdklOM8b2dNMXu7zuapGmrG5TmjImkrTZia6um0bmXVZvVMEpf6ac5pQmCaXbLH2u2zzhu13GBc9yklI5CKW3Wr8OW-tOG-X9KAvGsyRnGy1qqf308HLeYblIUrrRBDVIwjm-xq5A6FM9njxJqVY--FuwoIKe3u2p1OT5Bb4r7_FV7mJ3iqCsAWvQ_vcff_3xs_z27ceBZHQzOl30IZz9dE8dCT-eVOjHetvgOTgixfzv6ezs33hu-XES7wk_zvpfC_5fAAAA__86WVJj">