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

kargl at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |kargl at gcc dot gnu.org

--- Comment #1 from kargl at gcc dot gnu.org ---
(In reply to Raoul Hidalgo Charman from comment #0)
> The following example, where an interface is defined for the surrounding
> program unit fails to compile:
> 
>       function foo(arg1) result(res)
> 
>       interface foo
>         function foo(arg1)
>           integer*2 foo(3)
>           integer*8 arg1
>         end function foo
>       end interface
> 
>       integer*2 res(3)
>       integer*8 arg1
>       res = (/1,2,int(arg1,4)/)
>       end function
> 
> Giving the error:
> 
> recursive-interface.f:4:8:
> 
>     4 |         function foo(arg1)
>       |        1
> Error: Procedure pointer result ‘foo’ at (1) is missing the pointer attribute
> 
> Given you can use this function with that interface, this appears to be an
> incorrect warning.

It's not a warning.  It is an error.  And, yes it seems wrong.

> 
> While I don't see any reason why a correctly defined interface would not be
> allowed, especially if it's not even used and result is used to disambiguate
> the symbol, other compilers do fail to compile and complain about using an
> interface with the same name as the surrounding program unit. XLF complained
> for normal interfaces, while Sun Studio just complains for generic interface.
> 
> GFortrans error message should at least be more informative, explicitly
> saying it's not allowed if this is the case.
> 
> I came across this issue because a library had an include with many
> interfaces, and was then trying to use some of those interfaces in the
> definitions of those program units.

It seems to be invalid Fortran.  From Fortran 2018

     C1501 (R1501) An interface-block in a subprogram shall not contain
     an interface-body for a procedure defined by that subprogram.

It seems gfortran is missing a check for C1501.

Reply via email to