This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
Re: [Patch, Fortran, F08] PR 85537: Invalid memory reference at runtime when calling subroutine through procedure pointer
- From: Thomas Koenig <tkoenig at netcologne dot de>
- To: Janus Weil <janus at gcc dot gnu dot org>, gfortran <fortran at gcc dot gnu dot org>, gcc-patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 27 Mar 2019 22:54:39 +0100
- Subject: Re: [Patch, Fortran, F08] PR 85537: Invalid memory reference at runtime when calling subroutine through procedure pointer
- References: <CAKwh3qgMxH74fKko6gQd3Y79iAdctWWmTdWYRws6K2=u1eXcPQ@mail.gmail.com>
Hi Janus,
the attached patch implements some missing constraints from Fortran
2008 concerning procedure pointer initialization (cf. the standard
quote in comment #18), thus fixing two accepts-invalid and
ICE-on-invalid problems.
I do not think this is correct.
F2008:
# 12.2.2.4 Procedure pointers
# A procedure pointer is a procedure that has the EXTERNAL and POINTER
# attributes; it may be pointer associated with an external procedure, #
# an internal procedure, [...]
So a procedure pointer can be associated with an internal procedure.
Comment#18 from the PR does not quote anything that says that
a procedure pointer cannot be associated with an internal procedure.
Also, for clarification, see Note 12.8, which states
# An internal procedure cannot be invoked using a procedure pointer from
# either Fortran or C after the host instance completes execution,
# because the pointer is then undefined. While the host instance is
# active, however, the internal procedure may be invoked from outside of
# the host procedure scoping unit if that internal procedure was passed
# as an actual argument or is the target of a procedure pointer.
So, we have to support this.
Regards
Thomas