https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78737

--- Comment #22 from Paul Thomas <pault at gcc dot gnu.org> ---
(In reply to janus from comment #20)
> (In reply to Damian Rouson from comment #19)
> > > On thinking about it, is the specific instance of write_formatted allowed?
> > 
> > I believe not.  Note 7.50 of the 31 August 2016 draft Fortran 2015 standard
> > includes the following:
> > 
> > "The dynamic type of an object cannot be abstract; therefore, a deferred
> > type-bound procedure cannot be invoked."
> > 
> > I interpret the above quote to mean that write_formatted as written in
> > comment #15 cannot be invoked.  Presumably that also means it is invalid
> > code. 
> 
> I'm not so sure here. Actually I tend to believe that comment 15 as such is
> valid. It just has two different things that (incidentally) share the same
> name (which is not forbidden in this context):
> 1) The deferred TBP 'write_formatted' of the type 'object'. As it is
> deferred, it has no implementation in that type and can only be invoked
> polymorphically.
> 2) The subroutine 'write_formatted' in the module 'object_interface'. I
> don't see anything that would prevent you from defining a subroutine in this
> way, but it simply cannot be interpreted as the implementation of the
> deferred TBP.
> 
> But then gfortran's runtime-interpretation of this code is wrong. It prints
> (with Paul's patch)
> 
>  write_formatted =>   99
>  write_formatted2 =>   99
> 
> since it calls 'write_formatted' as a DTIO procedure of the type 'object',
> which it is not! I think the correct output would only consist of the second
> line:
> 
>  write_formatted2 =>   99

Dear Damian and Janus,

As you might have gathered, I agree with both of you. In the words of Jean-Luc
Picard, "I will make it so."

If we are to have dynamic dispatch for UD-DTIO, where does it stop? Operators,
user defined operators? As you say, it is possible but the standards do not
seem to mandate it.

Paul

Reply via email to