[J3] Question about interface matchine

Brad Richardson everythingfunctional at protonmail.com
Thu Jan 28 01:16:01 UTC 2021


Thank you all for the explanations and references to the standard. I’m not sure I understand why the standard is written to allow this, but at least now I’m aware of it.

Regards,
Brad 

> On Jan 27, 2021, at 5:57 PM, Mark LeAir <mleair at nvidia.com> wrote:
> 
> 
> Just to clarify, my section numbers came from the Fortran 2018 spec. 😊
> 
> -----Original Message-----
> From: J3 <j3-bounces at mailman.j3-fortran.org> On Behalf Of Mark LeAir via J3
> Sent: Wednesday, January 27, 2021 3:54 PM
> To: Brad Richardson <everythingfunctional at protonmail.com>; General J3 interest list <j3 at mailman.j3-fortran.org>
> Cc: Mark LeAir <mleair at nvidia.com>
> Subject: Re: [J3] Question about interface matchine
> 
> External email: Use caution opening links or attachments
> 
> 
> It is legal Fortran based on section "15.5.2.4 Ordinary dummy variables", paragraph 3 which states in part:
> 
> "The dummy argument shall be type compatible with the actual argument..."
> 
> Section "7.3.2.3 CLASS type specifier", paragraph 5, second sentence, states:
> 
> " A polymorphic entity that is not an unlimited polymorphic entity is type compatible with entities of the same declared type or any of its extensions...."
> 
> And as we know both bar and dummy argument rhs have the same declared type (foo_t).
> 
> -Mark
> 
> -----Original Message-----
> From: J3 <j3-bounces at mailman.j3-fortran.org> On Behalf Of Brad Richardson via J3
> Sent: Wednesday, January 27, 2021 2:24 PM
> To: General J3 interest list <j3 at mailman.j3-fortran.org>
> Cc: Brad Richardson <everythingfunctional at protonmail.com>
> Subject: [J3] Question about interface matchine
> 
> External email: Use caution opening links or attachments
> 
> 
> Hi all,
> 
> Could someone please tell me whether the following code is standards conformant, and if so why? I contend that both the declared and dynamic type of bar do not match the interface and thus the code should not compile or execute without error. But gfortran, intel, and nag all compile and execute this code without complaint. Is there something about interface matching and argument types that I’m not understanding?
> 
> module foo_m
>    implicit none
> 
>    type :: foo_t
>    contains
>        procedure :: copy_into
>    end type
> 
>    type, extends(foo_t) :: bar_t
>    end type
> contains
>    subroutine copy_into(self, rhs)
>        class(foo_t), intent(inout) :: self
>        type(foo_t), intent(inout) :: rhs
>    end subroutine
> end module
> 
> program main
>    use foo_m, only: foo_t, bar_t
> 
>    implicit none
> 
>    type(foo_t) :: foo
>    class(foo_t), allocatable :: bar
> 
>    bar = bar_t()
>    call foo%copy_into(bar)
> end program
> 
> Thanks,
> Brad Richardson




More information about the J3 mailing list