]> git.proxmox.com Git - rustc.git/blob - src/test/ui/reachable/unreachable-try-pattern.rs
Update upstream source from tag 'upstream/1.40.0+dfsg1'
[rustc.git] / src / test / ui / reachable / unreachable-try-pattern.rs
1 // check-pass
2 #![feature(never_type, exhaustive_patterns)]
3 #![warn(unreachable_code)]
4 #![warn(unreachable_patterns)]
5
6 enum Void {}
7
8 impl From<Void> for i32 {
9 fn from(v: Void) -> i32 {
10 match v {}
11 }
12 }
13
14 fn bar(x: Result<!, i32>) -> Result<u32, i32> {
15 x?
16 }
17
18 fn foo(x: Result<!, i32>) -> Result<u32, i32> {
19 let y = (match x { Ok(n) => Ok(n as u32), Err(e) => Err(e) })?;
20 //~^ WARN unreachable pattern
21 //~| WARN unreachable expression
22 Ok(y)
23 }
24
25 fn qux(x: Result<u32, Void>) -> Result<u32, i32> {
26 Ok(x?)
27 }
28
29 fn vom(x: Result<u32, Void>) -> Result<u32, i32> {
30 let y = (match x { Ok(n) => Ok(n), Err(e) => Err(e) })?;
31 //~^ WARN unreachable pattern
32 Ok(y)
33 }
34
35
36 fn main() {
37 let _ = bar(Err(123));
38 let _ = foo(Err(123));
39 let _ = qux(Ok(123));
40 let _ = vom(Ok(123));
41 }