https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66544
--- Comment #4 from janus at gcc dot gnu.org --- Btw, I don't fully understand why "implicit none" should make any difference here. I can see that it would make a difference if you don't specify an interface in the procedure statement: module m implicit none contains function f() result(z) procedure(), pointer :: z end end module But this version works fine, with and without "implicit none". In your original test case the interface is fully specified, i.e. nothing is really 'implicit'. I guess the actual problem is the self reference of the interface. We should check if this is legal, and if not reject it.