https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90329
--- Comment #26 from Jakub Jelinek <jakub at gcc dot gnu.org> --- It could even allow tailcalls in the character(len=*) cases because in those cases if the caller omits the string length hidden argument, I see no reason to try to workaround that, it will simply never work properly. The only reason without tailcalls things appear to work is that the argument is TREE_READONLY and nothing touches it, so there is some hope it won't be modified either, when doing a tailcall if the tail callee needs any of those stack slots for other arguments, it will be written into. We could still allow tail calls if the callee needs fewer arguments than the caller and doesn't need to overwrite any of the hidden string length arguments the buggy callers don't provide.