https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60952
janus at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|Problem using "end" as a |[F03] Problem using "end" |type bound procedure and |as a type bound procedure |contained procedures |and contained procedures --- Comment #2 from janus at gcc dot gnu.org --- Here is another variant which is rejected with the same error: module m implicit none type A contains procedure, nopass :: e => end end type contains subroutine s1 contains subroutine s2 end end integer function end() end end Here is what I suspect is happening: 1) After parsing the type declaration, we know that there's a symbol called 'end'. 2) During the parsing of the two subroutines, it somehow happens that the symbol 'end' is wrongly identified as a variable. 3) When parsing the function, we get an error due to the conflict of the VARIABLE and PROCEDURE attributes. The first thing we need to find out is how exactly 'end' obtains the attribute VARIABLE.