efriedma-quic wrote: Suppose you have a function like `void g(S, S); void f(S a, S b) { return g(b, a); }`. To tail-call, you have to essentially swap a and b. You use a temporary to avoid overwriting the argument before you copy it. https://github.com/llvm/llvm-project/pull/125142