finalize simple - ThyType%ind = 21 finalize simple - ThyType2%ind = 22 At start of program: final_count = 2 ******************************************************************* 1st assignment: No finalization because MyType unallocated. After 1st assignment(var not allocated): final_count = 2(0) ******************************************************************* 2nd assignment: MyType(=simple(1,MyType) finalized before assignment finalize simple - Mytype2%ind = 1 After 2nd assignment(var allocated): final_count = 1(1) ******************************************************************* 3rd assignment: MyTypeArray(%ind = [41 42]) finalized before assignment finalize simple(:) - MyTypeArray%ind= 42 43 finalize simple(:) - ThyType%ind= 21 22 After 3rd assignment(array var allocated): final_count = 2(1) ******************************************************************* Deallocation generates final call with self = simple (21, ThyType) 4th assignment: MyTypeArray finalized before assignment Mtype finalized before assignment with self = simple (11, MyType) Function result finalized after assignment with self = simple (99, MyType) finalize simple - ThyType%ind = 21 finalize simple - MyType%ind = 11 finalize simple - MyType%ind = 99 finalize simple - MyType%ind = 99 After 4th assignment(array var allocated) :final_count = 4(3) ******************************************************************* 5th assignment: MyTypeArray finalized before assignment 1] First finalization is of 'res' in constructor3 with: Self = [complicated (-1, constructor3, 0.0), complicated (-1, ThyTypeArra1, 0.0)] 2] ThyTypeArray is finalized before assignment and after evaluation of constructor3 Self = [3 times complicated (-1, ThyTypeArra1,0.0)] 3] Function result finalized after assignment with Self = [complicated (-1, ThyTypeArra2, 0.0), complicated (-1, ThyTypeArra2, 0.0)] finalize complicated - ThyTypeArra1 = -1 0.00 finalize simple - ThyTypeArra1%ind = -1 constructor3: final_count = 2 finalize complicated(2) - constructor3 = ******** 0.00 0.00 finalize simple(:) - constructor3%ind= ******** finalize complicated(2) - ThyTypeArra2 = 1 3 2.00 4.00 finalize simple(:) - ThyTypeArra2%ind= 1 3 finalize complicated(2) - ThyTypeArra2 = 1 3 2.00 4.00 finalize simple(:) - ThyTypeArra2%ind= 1 3 After 5th assignment(array var allocated): 8(6) ******************************************************************* Deallocate ThyTypeArray. finalize complicated(2) - ThyTypeArra2 = 1 3 2.00 4.00 finalize simple(:) - ThyTypeArra2%ind= 1 3 ******************************************************************* 6th assignment: A repeat of the previous with an allocatable function result. This should give the same result as the 5th assignment. finalize complicated - ThyTypeArra1 = -1 0.00 finalize simple - ThyTypeArra1%ind = -1 constructor4: final_count = 2 finalize complicated - constructor3 = 1 1.00 finalize simple - constructor3%ind = 1 finalize complicated(2) - ThyTypeArra2 = 1 3 2.00 4.00 finalize simple(:) - ThyTypeArra2%ind= 1 3 finalize complicated(2) - ThyTypeArra2 = 1 3 2.00 4.00 finalize simple(:) - ThyTypeArra2%ind= 1 3 After 6th assignment(array var allocated): 8(6) ******************************************************************* Deallocations at end finalize simple - MyType%ind = 99 After 1st deallocation: 1 finalize simple - ThyType2%ind = 22 After 2nd deallocation: 2 finalize simple(:) - ThyType%ind= 21 22 After 3rd deallocation: 3