summaryrefslogtreecommitdiffstats
path: root/tests/ui/async-await/issues/issue-59972.rs
blob: c2e24a96b1d930f46065c1c087e40ab539423cd6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// Incorrect handling of uninhabited types could cause us to mark generator
// 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() {
}