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