
Hi, The patch I've pushed should hopefully fix this and also strengthen the sanity checking somewhat :-) Tom Tom Shackell wrote:
Hi Michal,
Yes I found exactly the same bug yesterday evening when I was rewriting the sanity checker (it now scans the heap linearly). The problem is simple, cinfo_alloc contained:
if (obj){ zcon = (Node*)heap_alloc(wordsof(Node)); MAKE_NODE(zcon, cinfo, N_NORMAL); obj->node = zcon; obj->info = (Info*)cinfo; }
which allocates a zero arity constructor node for the constructor (I just copy pased the code from finfo_alloc to allocate a CAF node). However, I forgot that not all constructors are zero arity and so not all need a zero arity node. So the code should read:
if (obj){ if (cinfo->size == 0){ zcon = (Node*)heap_alloc(wordsof(Node)); MAKE_NODE(zcon, cinfo, N_NORMAL); obj->node = zcon; } obj->info = (Info*)cinfo; }
I'll submit a patch shortly :-)
Thanks very much for your efforts, it really has made my life easier :-)
Tom