38 lines
900 B
Rust
38 lines
900 B
Rust
// Test that uninhabited saved local doesn't make the entire variant uninhabited.
|
|
//@ run-pass
|
|
#![allow(unused)]
|
|
#![feature(assert_matches)]
|
|
#![feature(coroutine_trait)]
|
|
#![feature(coroutines)]
|
|
#![feature(never_type)]
|
|
use std::assert_matches::assert_matches;
|
|
use std::ops::Coroutine;
|
|
use std::ops::CoroutineState;
|
|
use std::pin::Pin;
|
|
|
|
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(()));
|
|
}
|
|
|
|
fn main() {
|
|
run::<!>(false, false);
|
|
}
|