rust/tests/ui/uninhabited/privately-uninhabited-mir-c...

32 lines
788 B
Rust

// Verifies that MIR building for a call expression respects
// privacy when checking if a call return type is uninhabited.
//@ run-rustfix
#![allow(unreachable_code, unused_variables)]
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
}