yet another limit check bug
Stephen Weeks
MLton@sourcelight.com
Wed, 24 Oct 2001 11:32:03 -0700
I decided to try out the new contification on what used to be a
problematic example, like:
----------------------------------------
fun f n = if n = 0 then () else g (n - 1)
and g n = if n = 0 then () else f (n - 1)
val _ =
if 0w0 = MLton.Random.rand ()
then f 10
else g 10
----------------------------------------
It did the right thing, and contified f and g within main.
Unfortunately, this also brings out another bug regarding the loop
limit checks required for signal handling (even with the
-limit-check-per-block true). Loop limit checks are currently
inserted at nodes that have an incoming edge from a node that they
dominate. Unfortunately, in the control-flow graph for the above
program, there is no such node in the f-g loop. We probably need to
do something using loopForests to ensure that all the loop headers get
a loop limit check.