The main documentation of the Finalize_Logical Procedure contains additional explanation of this code listing.
subroutine Finalize_Logical_0 (L, status) ! Use association information. use Caesar_Flags_Module, only: finalize_logical_flag ! Input/Output variable. type(logical), intent(inout) :: L ! Variable to be finalized. ! Output variable. type(Status_type), intent(out), optional :: status ! Exit status. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Verify requirements - none. ! Finalization. L = finalize_logical_flag ! No errors for finalization possible for scalars. if (PRESENT(status)) status = 'Success' ! Verify guarantees - none. return end subroutine Finalize_Logical_0 define([REPLICATE_ROUTINE],[ subroutine Finalize_Logical_$1 (L, status) ! Input/Output variable. type(logical,$1) :: L ! Variable to be finalized. ! Output variable. type(Status_type), intent(out), optional :: status ! Exit status. ! Internal variable. type(integer) :: deallocate_status ! Deallocation Status. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Verify requirements. VERIFY(ASSOCIATED(L),0) ! L should be associated. ! Deallocation. DEALLOCATE(L, stat=deallocate_status) ! Finalization and nullification. NULLIFY(L) ! Verify guarantees and/or set status flag. if (PRESENT(status)) then WARN_IF(deallocate_status /= 0, 3) ! Deallocation error check. WARN_IF(ASSOCIATED(L),3) ! L is now unassociated. if (deallocate_status == 0 .and. .not.ASSOCIATED(L)) then status = 'Success' else status = 'Memory Error' end if else VERIFY(deallocate_status == 0, 0) ! Deallocation error check. VERIFY(.not.ASSOCIATED(L), 0) ! L is now unassociated. end if return end subroutine Finalize_Logical_$1 ]) REPLICATE_ARRAYS