https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83324
--- Comment #5 from Mikael Pettersson <mikpelinux at gmail dot com> --- To get guaranteed tail-calls to work you need to adjust the calling convention for the caller as well as the callee. Things are trivial as long as parameters always fit in registers. With parameters on the stack you need, in general, to shift the responsibility for their deallocation from caller to callee, and this results in a non-standard calling convention.