https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87734
janus at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |janus at gcc dot gnu.org --- Comment #6 from janus at gcc dot gnu.org --- Here is a reduced variant of comment #0: module m_vstring implicit none public :: vstring_length contains subroutine vstring_cast() character ( len = vstring_length() ) :: char_string end subroutine pure integer function vstring_length () end function end module It compiles with 5.5.0, ICEs in is_illegal_recursion with 6.5.0, 7.3.0, 8.2.0 and is rejected with trunk (as mentioned in comment #5): 12 | pure integer function vstring_length () | 1 Error: MODULE-PROC procedure at (1) is already declared as EXTERNAL-PROC procedure