Use -> !
to test divergence
This commit is contained in:
parent
d1f1075931
commit
c5a4e074f0
@ -9,21 +9,24 @@ enum Void {}
|
|||||||
|
|
||||||
// A never pattern alone diverges.
|
// A never pattern alone diverges.
|
||||||
|
|
||||||
fn never_arg(!: Void) -> u32 {}
|
fn never_arg(!: Void) -> ! {}
|
||||||
|
|
||||||
fn ref_never_arg(&!: &Void) -> u32 {}
|
fn never_arg_returns_anything<T>(!: Void) -> T {}
|
||||||
|
|
||||||
fn never_let() -> u32 {
|
fn ref_never_arg(&!: &Void) -> ! {}
|
||||||
|
|
||||||
|
fn never_let() -> ! {
|
||||||
let ptr: *const Void = std::ptr::null();
|
let ptr: *const Void = std::ptr::null();
|
||||||
unsafe {
|
unsafe {
|
||||||
let ! = *ptr;
|
let ! = *ptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn never_match() -> u32 {
|
fn never_match() -> ! {
|
||||||
let ptr: *const Void = std::ptr::null();
|
let ptr: *const Void = std::ptr::null();
|
||||||
unsafe {
|
unsafe {
|
||||||
match *ptr { ! };
|
match *ptr { ! };
|
||||||
}
|
}
|
||||||
println!(); // Ensures this typechecks because of divergence.
|
// Ensures this typechecks because of divergence and not the type of the match expression.
|
||||||
|
println!();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user