]> git.lizzy.rs Git - rust.git/blob - tests/ui/reachable/unreachable-try-pattern.rs
Fix #106496, suggest remove deref for type mismatch
[rust.git] / tests / 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 }