35 lines
716 B
Rust
35 lines
716 B
Rust
// Incorrect handling of uninhabited types could cause us to mark coroutine
|
|
// types as entirely uninhabited, when they were in fact constructible. This
|
|
// caused us to hit "unreachable" code (illegal instruction on x86).
|
|
|
|
// run-pass
|
|
|
|
// compile-flags: --edition=2018 -Aunused
|
|
|
|
pub enum Uninhabited { }
|
|
|
|
fn uninhabited_async() -> Uninhabited {
|
|
unreachable!()
|
|
}
|
|
|
|
async fn noop() { }
|
|
|
|
async fn contains_never() {
|
|
let error = uninhabited_async();
|
|
noop().await;
|
|
let error2 = error;
|
|
}
|
|
|
|
async fn overlap_never() {
|
|
let error1 = uninhabited_async();
|
|
noop().await;
|
|
let error2 = uninhabited_async();
|
|
drop(error1);
|
|
noop().await;
|
|
drop(error2);
|
|
}
|
|
|
|
#[allow(unused_must_use)]
|
|
fn main() {
|
|
}
|