Hi Tobias,
I agree completely with all that you are saying. Declaring derived types in
a module is guaranteed to produce vtables and final wrappers, so that they
are available in scopes where they are used. Had we thought more about
class design, we might have added the vtable to the entity, rather than
using a pointer to it. Anyway, the pointer does act as a useful
identification for the type. As an example:
module m
type t
integer :: i
end type
type s
type(t), allocatable :: j
end type
end module
use m
call foo
contains
subroutine foo
type(s), allocatable :: a
a = s(t(42))
print *, a%j
end subroutine
end
generates a final wrapper '__final_m_S', although it is not called on
leaving 'foo' scope because there are no final procedures.
Just to confirm what I said earlier: The unpatched and patched mainlines
both complete the polyhedron tests, including rnflow.f90, with -O2.
================================================================================
Date & Time : 8 Mar 2023 14:45:29
Test Name : gfor_13
Compile Command : gfc13 -ffast-math -funroll-loops -O2 %n.f90 -o %n
Benchmarks : ac aermod air capacita channel2 doduc gas_dyn2 fatigue2
induct2 linpk mp_prop_design nf protein rnflow test_fpu2 tfft2
Maximum Times : 10000.0
Target Error % : 0.100
Minimum Repeats : 1
Maximum Repeats : 2
Benchmark Compile Executable Ave Run Number Estim
Name (secs) (bytes) (secs) Repeats Err %
--------- ------- ---------- ------- ------- ------
ac 0.00 51720 7.78 2 0.0386
aermod 0.00 1079416 10.32 2 0.1599
air 0.00 87096 3.59 2 0.4316
capacita 0.00 65936 22.81 2 0.1951
channel2 0.00 39832 104.15 2 0.7287
doduc 0.00 182104 14.40 2 0.0035
gas_dyn2 0.00 91784 181.61 2 0.1261
fatigue2 0.00 86496 95.34 2 0.2061
induct2 0.00 183824 101.46 2 0.3992
linpk 0.00 43576 6.16 2 0.4545
mp_prop_desi 0.00 48376 94.77 2 0.2168
nf 0.00 52192 9.94 2 0.2363
protein 0.00 128248 22.73 2 1.4098
rnflow 0.00 136296 26.17 2 0.1051
test_fpu2 0.00 106232 83.34 2 0.0360
tfft2 0.00 35608 46.70 2 0.5439
Geometric Mean Execution Time = 28.87 seconds
Paul