assume_init is only allowed when the MaybeUninit has been initialized before calling it. It does not freeze uninitialized bytes. Calling __msan_unpoison would hide UB from calling assume_uninit without first initializing the MaybeUninit. You should probably call __msan_unpoison yourself in this case as you know that the assembly has initialized the MaybeUninit.
As we discussed this in the other bug, your point was brought up. Perhaps the core library could provide a method that calls __msan_unpoison when MSan is running via -Zsanitizer=memory, and otherwise does nothing. That way, this issue isn't constantly rediscovered.
Yeah, typically provide fallback C implementations of ASM functions. That helps support more target architectures, is good for testing the ASM, and can be used with MSan.
Well, perhaps. There is still a missing cfg value here (crates should be able to detect they are running under msan without doing their own flag). As a consumer of ring, I want to test its asm routines while running under msan. It's other crates I'm worried about, but I don't want to test code I don't ship, either.