38 lines
899 B
Rust
38 lines
899 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);
|
||
|
}
|