https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77602
kargl at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |kargl at gcc dot gnu.org --- Comment #2 from kargl at gcc dot gnu.org --- "cyclic" is the wrong word. subroutine s(x) ! line 1 implicit character (a-z) ! line 2 character(len=len(y)+1) :: x ! line 3 character(len=len(x)+1) :: y ! line 4 end ! line 5 line 2 causes the first reference to 'y' to give 'y' an implicit type of CHARACTER(1), so 'x' in line 3 has len=2. 'y' may appear in a subsequent declaration where that declaration confirms the type. Hmmm, this took awhile to find (F2003, p126): A variable in a specification expression shall have its type and type parameters, if any, specified by a previous declaration in the same scoping unit, by the implicit typing rules in effect for the scoping unit, or by host or use association. If a variable in a specification expression is typed by the implicit typing rules, its appearance in any subsequent type declaration statement shall confirm the implied type and type parameters. This is not a numbered constraint. The requirement is on the programmer to get it right. So, yes, the code is invalid, and gfortran can do anything it wants including ICE.