This fixes #21708 (closed) by reimplementing keepAlive#
as an out-of-line primop which manually pushes a stack frame, essentially reverting to Option (A) as described on the wiki page. This is not particularly efficient but is more robust than the previous implementation in terms of touch#
.
Future work
We can further optimise this approach by implementing #16098 and teaching the code generator to inline the frame push (Option C). This would allow us to avoid the construction of the continuation closure and the associated calls.