Auto merge of #3225 - RalfJung:coroutine, r=RalfJung

add test for uninhabited saved locals in a coroutine

adds the test from https://github.com/rust-lang/rust/pull/118871 in Miri as well
This commit is contained in:
bors 2023-12-14 06:58:28 +00:00
commit 5747646aab

View File

@ -220,7 +220,38 @@ fn smoke_resume_arg() {
});
}
fn uninit_fields() {
// Test that uninhabited saved local doesn't make the entire variant uninhabited.
// (https://github.com/rust-lang/rust/issues/115145, https://github.com/rust-lang/rust/pull/118871)
fn conjure<T>() -> T {
loop {}
}
fn run<T>(x: bool, y: bool) {
let mut c = || {
if x {
let _a: T;
if y {
_a = conjure::<T>();
}
yield ();
} else {
let _a: T;
if y {
_a = conjure::<T>();
}
yield ();
}
};
assert!(matches!(Pin::new(&mut c).resume(()), CoroutineState::Yielded(())));
assert!(matches!(Pin::new(&mut c).resume(()), CoroutineState::Complete(())));
}
run::<!>(false, false);
}
fn main() {
basic();
smoke_resume_arg();
uninit_fields();
}