This program contains an expression of the form
let x = snd (_, snd (_, snd (_, x)))
(probably not explicitly, but that's what appears in the heap at
runtime). Obviously the program should deadlock if it ever enters
this thing, but apparently the test program in #2327 never does.
The GC tries to evaluate the snd closures, and gets confused due to
the loop. In particular the earlier fix for #1038 was to blame.