[flang] derived-type finalization
This patch implements the derived-type finalization for monomorphic and polymorphic derived-type. The finalization is done through a call to the `Destroy` runtime function so the allocatable component object are also finalized correctly when needed. It would be possible to finalize monomorphic derived-type with non finalizable component with a direct call to their finalize subroutine. 7.5.6.3 point 1: LHS nonallocatable object and LHS allocatable object finalization. Done with call to `Destroy` for monomorphic derived-type and through `Assign` for polymorphic entities. 7.5.6.3 point 2: Done within the deallocation calls. 7.5.6.3 point 3: A function context is added to the bridge to attach finalization that need to happen on function/subroutine exit. 7.5.6.3 point 4: BLOCK construct not yet implemented. 7.5.6.3 point 5/6: Finalization attach to the stmtCtx in a similar way than 9.7.3.2 point 4. 7.5.6.3 point 7: INTENT(OUT) finalization done with a call to `Destroy` runtime function call. This patch passes 9/10 tests in the proposed test-suite https://github.com/llvm/llvm-test-suite/pull/13 - The case with BLOCK construct will be implemented later when BLOCK are implemented upstream. - Automatic deallocation is not yet implemented. Finalization triggered by automatic deallocation is then not triggered. Reviewed By: jeanPerier, PeteSteinfeld Differential Revision: https://reviews.llvm.org/D142707
Loading
Please sign in to comment