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.