32 lines
788 B
Rust
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
|
|
}
|