This used to crash the interpreter, either because we ran into the assertion in CheckMutable() or because we accessed a Descriptor* pointer preceding the field of a record. Those are preceded by an InlineDescriptor though.
Also, we forgot to handle the metadata when moving the Block over to a DeadBlock.
(Regarding the InlineDescriptor stuff from above... I didn't add it in this patch because the problem does not require it, but I'll do fix that later).
I understand that we were hitting this assertion, but why is removing the assertion the correct approach? I thought it made sense to check for pointer liveness here.