[MLton] Bug in IntInf implementation
Wesley W. Terpstra
wesley at terpstra.ca
Fri Dec 7 05:59:23 PST 2007
The version: (at least) svn/HEAD
boom.sml:
> val x : IntInf.int = 1
> val y = IntInf.<< (x, 0w838860800) (* 100MB *)
> val () = print "unreached\n"
For comparison, boom.c:
> #include <gmp.h>
>
> int main() {
> mpz_t x;
> mpz_init2(x, 1);
> mpz_mul_2exp(x, x, 838860800);
> printf("reached\n");
> return 0;
> }
The bug:
initIntInfRes in runtime/gc/int-inf.c points a GMP limb buffer at the
heap. It has no reason to believe the current heap can contain the
result. Normally the mpz_* functions will gmp_realloc memory when
needed. I have no idea what will happen when calling this on a pointer
in the ML heap. It seems to hang.
Solution:
Use mp_set_memory_functions
More information about the MLton
mailing list