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

Reply via email to