[MLton] Closure-convert bug

Matthew Fluet fluet@cs.cornell.edu
Wed, 13 Jul 2005 08:15:31 -0400 (EDT)


On Wed, 13 Jul 2005, Wesley W. Terpstra wrote:
> terpstra@dakar:~$ ./mlton/build/bin/mlton
> MLton MLTONVERSION (built Wed Jul 13 12:57:45 2005 on dakar)
> terpstra@dakar:~$ cat bug.sml
> val x = ref (fn _ => ())
> val () = x := (fn x => (x andalso true; ()))
> val y = MLton.Weak.new (!x)
> val z = MLton.Weak.get y
> val _ = if isSome z then print "Resident\n" else print "Cleared\n"
> terpstra@dakar:~$ ./mlton/build/bin/mlton bug.sml
> AbstractValue.fromType: non-arrow

Actually, the bug is in closure converion's flow analysis pass.  
(Compiling with  -verbose 2  will let you see which pass raised an 
error.)  The fact that the bug is tickled in closure conversion isn't too 
surprising, since you are trying to make a weak pointer to a closure.