[MLton] MLton.GC.collect hangs when using MLton.Finalizable
Wesley W. Terpstra
wesley at terpstra.ca
Sat Feb 17 05:58:10 PST 2007
On Feb 17, 2007, at 2:33 PM, Wesley W.Terpstra wrote:
> Compile the attached program and watch it hang in MLton.GC.collect.
Ahh. It's actually going into an infinite loop in Ring.fold. I
believe what's happening is that MLton is inlining the two "sum a"
calls and then detecting the common sub-expression where I record the
value 'eor' (end-of-ring). It does not inline the recursive calls,
just remembers the termination of the recursive call. Then the
GC.collect happens which changes what 'eor' WOULD have been.
As evidence, if I place enough statements between the GC.collect and
the following print statement, everything works.
I think the fix is simple. The compiler has to recognize that
MLton.GC.collect () has side-effects. How would I tell it that?
More information about the MLton