diff options
| author | Nadrieril <nadrieril+git@gmail.com> | 2024-01-18 18:22:08 +0100 |
|---|---|---|
| committer | Nadrieril <nadrieril+git@gmail.com> | 2024-01-22 15:12:57 +0100 |
| commit | d1f1075931983be0a2ae91905fe8a6da50149d3d (patch) | |
| tree | cc1df8de34e9e05d3cc5220a2ed6218b849d9117 /tests/ui/rfcs | |
| parent | a9ea07d17c329f5a36e01826f704c16093d02f14 (diff) | |
| download | rust-d1f1075931983be0a2ae91905fe8a6da50149d3d.tar.gz rust-d1f1075931983be0a2ae91905fe8a6da50149d3d.zip | |
Never pattern in `let` statement diverges
Diffstat (limited to 'tests/ui/rfcs')
3 files changed, 27 insertions, 15 deletions
diff --git a/tests/ui/rfcs/rfc-0000-never_patterns/diverge-causes-unreachable-code.rs b/tests/ui/rfcs/rfc-0000-never_patterns/diverge-causes-unreachable-code.rs index 5c852c8adcc..f7e4007b920 100644 --- a/tests/ui/rfcs/rfc-0000-never_patterns/diverge-causes-unreachable-code.rs +++ b/tests/ui/rfcs/rfc-0000-never_patterns/diverge-causes-unreachable-code.rs @@ -17,13 +17,14 @@ fn ref_never_arg(&!: &Void) -> u32 { //~^ ERROR unreachable statement } -//fn never_let() -> u32 { -// let ptr: *const Void = std::ptr::null(); -// unsafe { -// let ! = *ptr; -// } -// println!(); -//} +fn never_let() -> u32 { + let ptr: *const Void = std::ptr::null(); + unsafe { + let ! = *ptr; + } + println!(); + //~^ ERROR unreachable statement +} fn never_match() -> u32 { let ptr: *const Void = std::ptr::null(); diff --git a/tests/ui/rfcs/rfc-0000-never_patterns/diverge-causes-unreachable-code.stderr b/tests/ui/rfcs/rfc-0000-never_patterns/diverge-causes-unreachable-code.stderr index c9cd3f53944..c33a5855d50 100644 --- a/tests/ui/rfcs/rfc-0000-never_patterns/diverge-causes-unreachable-code.stderr +++ b/tests/ui/rfcs/rfc-0000-never_patterns/diverge-causes-unreachable-code.stderr @@ -24,7 +24,18 @@ LL | println!(); = note: this error originates in the macro `$crate::print` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info) error: unreachable statement - --> $DIR/diverge-causes-unreachable-code.rs:33:5 + --> $DIR/diverge-causes-unreachable-code.rs:25:5 + | +LL | let ! = *ptr; + | - any code following a never pattern is unreachable +LL | } +LL | println!(); + | ^^^^^^^^^^ unreachable statement + | + = note: this error originates in the macro `$crate::print` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info) + +error: unreachable statement + --> $DIR/diverge-causes-unreachable-code.rs:34:5 | LL | match *ptr { ! }; | ---------------- any code following this `match` expression is unreachable, as all arms diverge @@ -34,5 +45,5 @@ LL | println!(); | = note: this error originates in the macro `$crate::print` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info) -error: aborting due to 3 previous errors +error: aborting due to 4 previous errors diff --git a/tests/ui/rfcs/rfc-0000-never_patterns/diverges.rs b/tests/ui/rfcs/rfc-0000-never_patterns/diverges.rs index 40aa2bd29e5..6f4b81b9b25 100644 --- a/tests/ui/rfcs/rfc-0000-never_patterns/diverges.rs +++ b/tests/ui/rfcs/rfc-0000-never_patterns/diverges.rs @@ -13,12 +13,12 @@ fn never_arg(!: Void) -> u32 {} fn ref_never_arg(&!: &Void) -> u32 {} -// fn never_let() -> u32 { -// let ptr: *const Void = std::ptr::null(); -// unsafe { -// let ! = *ptr; -// } -// } +fn never_let() -> u32 { + let ptr: *const Void = std::ptr::null(); + unsafe { + let ! = *ptr; + } +} fn never_match() -> u32 { let ptr: *const Void = std::ptr::null(); |
