miri: Add option to flag uninitialized integers as UB

The reference currently states that this code is UB, but Miri deliberately accepts it:

fn main() {
    let _val = unsafe { std::mem::MaybeUninit::<usize>::uninit().assume_init() };
}

The reason we accept it is that the lang-team is not sure if we really want this to be UB (also see https://github.com/rust-lang/unsafe-code-guidelines/issues/71), so the conservative choice for the reference is to make it UB for now, but in Miri I fear this might lead to too many errors that people could consider false positives (even though by the letter of the reference they are true positives).

Still it could be interesting to see how much code (that Miri can run) actually fails when considering uninitialized integers UB, so having a flag in Miri to enable stricter checking would be interesting.

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Reactions: 4
  • Comments: 17 (17 by maintainers)

Commits related to this issue

Most upvoted comments

Yeah – (a) I am not sure if we are hitting those codepaths (we are not running the std test suite, only core and alloc), and (b) validity is not checked recursively through references (see https://github.com/rust-lang/unsafe-code-guidelines/issues/77).

The good news is that the Rust libcore/liballoc test suites pass even with this flag. 😃