*ping *
Tobias Burnus wrote:
Dear all,
this small patch fixes some small issues with the current FINAL
implementation, which is still disabled. Namely:
(a) class.c: TRANSFER has an optional size= argument; if one doesn't
has an actual-argument (which can be expr == NULL), it segfaults.
(b) class.c: SIZE needs to return an index-size-kind integer not a
default-kind integer (tree checking error, but potentially also wrong
code)
(c) trans.c: Scalar coarrays (with -fcoarray=lib) were mishandled -
they also use an array descriptor
Build and regtested on x86-64-gnu-linux.
OK?
(I target 4.9 with this patch; in principle, it could also be applied
to 4.8: The code is not used, yet, and thus it shouldn't harm on 4.8
but there is also no benefit.)
The full patch, which enables finalization and regtests is available
at: https://userpage.physik.fu-berlin.de/~tburnus/final/ – The patch
still requires some clean up. In addition, finalization (with a user
FINAL subroutine) is mishandled for allocatable INTENT(OUT) as
gfortran handles it (at least partially) in the caller (trans-expr.c's
gfc_conv_procedure_call) and not in the callee (trans-decl.c). That
will lead to not finalizing and segfaults at run time. There are more
issues, but for an experimental implementation, fixing this issue
should be enough. (Note: the .mod version should be bumped to force
recompilation, which is required due to the ABI change of the vtable.)
Tobias