mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-03 17:35:28 +03:00
Use -> ! to test divergence
This commit is contained in:
@@ -9,21 +9,24 @@ enum Void {}
|
||||
|
||||
// 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();
|
||||
unsafe {
|
||||
let ! = *ptr;
|
||||
}
|
||||
}
|
||||
|
||||
fn never_match() -> u32 {
|
||||
fn never_match() -> ! {
|
||||
let ptr: *const Void = std::ptr::null();
|
||||
unsafe {
|
||||
match *ptr { ! };
|
||||
}
|
||||
println!(); // Ensures this typechecks because of divergence.
|
||||
// Ensures this typechecks because of divergence and not the type of the match expression.
|
||||
println!();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user