
I appear to have tracked down the bug for ffi021: the new
code generator doesn't appear to clear the tag bit for the
pointer to heap before:
// outOfLine should follow:
(_sR1::I32,) = foreign "ccall"
_sQR::I32((I32[_sRi::I32 + 7], `signed'),
(I32[_sRi::I32 + 11], PtrHint),
(I32[_sRi::I32 + 15],))[_unsafe_call_];
// emitReturn: Sequel: Assign
;
(gdb) disas
Dump of assembler code for function sRi_info:
=> 0x0804aa6c <+0>: mov %esi,%eax
0x0804aa6e <+2>: lea 0x0(%ebp),%ecx
0x0804aa71 <+5>: cmp 0x54(%ebx),%ecx
0x0804aa74 <+8>: jb 0x804aab3