[Patch, Fortran, F08] PR 85537: Invalid memory reference at runtime when calling subroutine through procedure pointer
Janus Weil
janus@gcc.gnu.org
Wed Mar 27 22:23:00 GMT 2019
Hi Thomas,
> > 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.
Absolutely, a procedure pointer can in principle be associated with an
internal procedure, and my patch does not change that. What the patch
rejects is the ('static' in the C sense) pointer initialization of a
procedure pointer with an internal procedure, which is forbidden per
F2008:C1220.
procedure(..), pointer :: pp => internal_proc
A normal pointer assignment is still allowed per F2008:C729:
pp => internal_proc
Hope you agree (and sorry for not being more verbose in my explanation
in the first place).
Cheers,
Janus
More information about the Fortran
mailing list