rust/tests/ui/uninhabited/privately-uninhabited-mir-call.fixed

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

32 lines
798 B
Rust
Raw Normal View History

2024-04-10 15:01:20 -05:00
// 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 = &mut 42;
widget::Widget::new();
// Error. Widget type is not known to be uninhabited here,
// so the following code is considered reachable.
*y = 2; //~ ERROR E0381
}