I've had problems with 5b54cf1a2892767fe949826a32d7820732028a38 because we were emitting a Destroy op for a local variable before we were done using that local variable. This moves the local's Block to a DeadBlock but leaves the metadata (a InlineDescriptor in the case of local variables) uninitialized, so we ran into failed builds on the msan builders.
This patch simply zeroes the metadata after calling destroying the local variable. The only difference is that we will now run into an assertion because the Descriptor* is nullptr, etc.
The added code could be in a #ifndef _NDEBUG block, and that would be better for performance of course, but... that wouldn't have helped in the case of the failing msan builders anyway I think.
I'm not certain this is a good idea -- we've just deallocated B and then we're saying "cool, now get me your raw data so I can muck about with it".
The comments in InterpState::deallocate() say // Free storage, if necessary., so this looks a lot like a use-after-free. Am I missing something?