blob: 6b85ada3aadee68063aa0779b4398a911b0efdb8 [file] [log] [blame]
#![feature(never_patterns)]
#![feature(let_chains)]
#![allow(incomplete_features)]
#![deny(unreachable_patterns)]
fn main() {}
enum Void {}
// Contrast with `./diverges.rs`: merely having an empty type around isn't enough to diverge.
fn wild_void(_: Void) -> u32 {}
//~^ ERROR: mismatched types
fn wild_let() -> u32 {
let ptr: *const Void = std::ptr::null();
unsafe {
//~^ ERROR: mismatched types
let _ = *ptr;
}
}
fn wild_match() -> u32 {
let ptr: *const Void = std::ptr::null();
unsafe {
match *ptr {
_ => {} //~ ERROR: mismatched types
}
}
}
fn binding_void(_x: Void) -> u32 {}
//~^ ERROR: mismatched types
fn binding_let() -> u32 {
let ptr: *const Void = std::ptr::null();
unsafe {
//~^ ERROR: mismatched types
let _x = *ptr;
}
}
fn binding_match() -> u32 {
let ptr: *const Void = std::ptr::null();
unsafe {
match *ptr {
_x => {} //~ ERROR: mismatched types
}
}
}
// Don't confuse this with a `let !` statement.
fn let_chain(x: Void) -> u32 {
if let true = true && let ! = x {}
//~^ ERROR: mismatched types
}