Naive fix for #21708

Closed Ben Gamari requested to merge wip/T21708 into master

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.

Edited by Ben Gamari

Merge request reports