[Patch, Fortran, OOP] PR 56261: seg fault call procedure pointer on polymorphic array

Tobias Burnus burnus@net-b.de
Sun Apr 7 18:30:00 GMT 2013


Janus Weil:
> here is a patch for an accepts-invalid problem: The Fortran standard
> demands that a procedure with a polymorphic dummy arguments can only
> be referenced with an explicit interface (see F08:12.4.2.2).

I concur.

> It is nontrivial to detect this in every case (e.g. passing a TYPE
> actual to a CLASS formal arg), but at least we can easily detect it if
> a polymorphic *actual* argument is involved (which means that the
> corresponding formal arg must also be polymorphic).

Sorry, I cannot follow here. At least at a glance, I don't see why the 
following program is invalid:

   implicit none
   type :: nc
   end type
   class    (nc), allocatable :: c
   procedure(), pointer     :: f => ff
   allocate(c)
   call f(c)
contains
   subroutine ff (self)
     TYPE(nc) :: self
   end subroutine
end


I don't see a reason why an explicit interface should be required - and 
passing a CLASS to a TYPE is also fine: "The dummy argument shall be 
type compatible with the actual argument. If the actual argument is a 
polymorphic coindexed object, the dummy argument shall not be polymorphic."

There is the restriction (4.3.1.3) that "A nonpolymorphic entity is type 
compatible only with entities of the same declared type." but in this 
example TYPE and CLASS have the same (declared) type.


Thus, the only place where the check can be is for:

   f => ff

In your example, the explicit interface of "ff" is known thus it should 
be testable at resolution time of the proc-pointer assignment.

Tobias



More information about the Fortran mailing list