Changing the set of accepted IL code based on pointer size doesn't seem right to me (and even if it is, amd64 is the wrong thing to check for). The test indicates that .NET accepts the code either way, though it is actually broken on win32.
Do you think it worth changing the patch in a way would arch independent (but crashing on such assemblies on x86), or wait for some reply on the bug in Mono for now?
Well, crashing doesn't seem right either, of course.
.NET seems to be very fragile when it encounters code like this, even on win64. I didn't verify this, but the way your test crashes on win32 looks like stack corruption, which really shouldn't happen with code that doesn't access any pointers. So, for Mono it may make more sense to continue rejecting this kind of code, in which case we'd want it in some form in Wine Mono (but it only feels worth it to me if Wine or at least Wine Staging can use it).