Hi Paul, Am 16.02.22 um 19:49 schrieb Paul Richard Thomas via Fortran:
Hi Harald and Jerry,I have gone back to the start and have gone through finalizable derived type assignments with the F2018 in hand. I have had a dreadful time with direct by reference function calls and still am struggling with assignment number 6 in the attached. I would be very grateful if you would run this testcase for the other brands.
please find attached the output of crayftn-12.0.3, NAG 7.0, and Intel 2021.5.0, always both default optimization and -g. The junk in the output for some brands is reproducible. :-(
As soon as I fix the 6th assignment, I will get on to class assignments.
Good luck, then. ;-) Cheers, Harald
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 41 0.00 0.00 finalize simple(:) - constructor3%ind= 0 41 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
out.intel
Description: Binary data
At start of program: final_count = 0 ******************************************************************* 1st assignment: No finalization because MyType unallocated. After 1st assignment(var not allocated): final_count = 0(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 After 3rd assignment(array var allocated): final_count = 1(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 After 4th assignment(array var allocated) :final_count = 2(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)] constructor3: final_count = 0 finalize complicated(2) - constructor3 = 0 0 0.00 0.00 finalize simple(:) - constructor3%ind= 0 0 finalize complicated(3) - ThyTypeArra1 = -1 -1 -1 0.00 0.00 0.00 finalize simple(:) - ThyTypeArra1%ind= -1 -1 -1 finalize complicated(2) - ThyTypeArra2 = 1 3 2.00 4.00 finalize simple(:) - ThyTypeArra2%ind= 1 3 finalize complicated(2) - ª ypeArra2 = **** 3 2.00 4.00 finalize simple(:) - ª ypeArra2%ind= **** 3 finalize complicated(2) - ª ypeArra2 = **** 3 2.00 4.00 finalize simple(:) - ª ypeArra2%ind= **** 3 After 5th assignment(array var allocated): 10(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. constructor4: final_count = 0 finalize complicated(2) - constructor4 = 1 1 1.00 1.00 finalize simple(:) - constructor4%ind= 1 1 finalize complicated(2) - ThyTypeArra2 = 1 3 2.00 4.00 finalize simple(:) - ThyTypeArra2%ind= 1 3 finalize complicated(3) - ThyTypeArra1 = -1 -1 -1 0.00 0.00 0.00 finalize simple(:) - ThyTypeArra1%ind= -1 -1 -1 After 6th assignment(array var allocated): 6(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
out.intel-g
Description: Binary data
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
At start of program: final_count = 0 ******************************************************************* 1st assignment: No finalization because MyType unallocated. After 1st assignment(var not allocated): final_count = 0(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 After 3rd assignment(array var allocated): final_count = 1(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 After 4th assignment(array var allocated) :final_count = 2(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)] constructor3: final_count = 0 finalize complicated(2) - constructor3 = 0 0 0.00 0.00 finalize simple(:) - constructor3%ind= 0 0 finalize complicated(3) - ThyTypeArra1 = -1 -1 -1 0.00 0.00 0.00 finalize simple(:) - ThyTypeArra1%ind= -1 -1 -1 finalize complicated(2) - ThyTypeArra2 = 1 3 2.00 4.00 finalize simple(:) - ThyTypeArra2%ind= 1 3 finalize complicated(2) - . ypeArra2 = **** 3 2.00 4.00 finalize simple(:) - . ypeArra2%ind= **** 3 finalize complicated(2) - . ypeArra2 = **** 3 2.00 4.00 finalize simple(:) - . ypeArra2%ind= **** 3 After 5th assignment(array var allocated): 10(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. constructor4: final_count = 0 finalize complicated(2) - constructor4 = 1 1 1.00 1.00 finalize simple(:) - constructor4%ind= 1 1 finalize complicated(2) - ThyTypeArra2 = 1 3 2.00 4.00 finalize simple(:) - ThyTypeArra2%ind= 1 3 finalize complicated(3) - ThyTypeArra1 = -1 -1 -1 0.00 0.00 0.00 finalize simple(:) - ThyTypeArra1%ind= -1 -1 -1 After 6th assignment(array var allocated): 6(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