summaryrefslogtreecommitdiffstats
path: root/src/test/ui/uninhabited/privately-uninhabited-mir-call.rs
blob: 2764bb563d30748046293437c1c05ad7363c2b2c (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
// Verifies that MIR building for a call expression respects
// privacy when checking if a call return type is uninhabited.

pub mod widget {
    enum Unimplemented {}
    pub struct Widget(Unimplemented);

    impl Widget {
        pub fn new() -> Widget {
            todo!();
        }
    }

    pub fn f() {
        let x: &mut u32;
        Widget::new();
        // Ok. Widget type returned from new is known to be uninhabited
        // and the following code is considered unreachable.
        *x = 1;
    }
}

fn main() {
    let y: &mut u32;
    widget::Widget::new();
    // Error. Widget type is not known to be uninhabited here,
    // so the following code is considered reachable.
    *y = 2; //~ ERROR E0381
}