about summary refs log tree commit diff
path: root/src/test/compile-fail
diff options
context:
space:
mode:
authorAndrew Cann <shum@canndrew.org>2017-01-21 00:08:37 +0800
committerAndrew Cann <shum@canndrew.org>2017-01-21 00:08:37 +0800
commite7e7c360af2535257c419646d150338eadcb8ca3 (patch)
treead3cbe50a6e9629b454fee9f1d4de403c247200f /src/test/compile-fail
parentc07aa3383494fa8e6dce17e08ce827b07359f8b9 (diff)
downloadrust-e7e7c360af2535257c419646d150338eadcb8ca3.tar.gz
rust-e7e7c360af2535257c419646d150338eadcb8ca3.zip
Add unreachable attribute to Err branch
Diffstat (limited to 'src/test/compile-fail')
-rw-r--r--src/test/compile-fail/unreachable-try-pattern.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/test/compile-fail/unreachable-try-pattern.rs b/src/test/compile-fail/unreachable-try-pattern.rs
index 6b334a0f275..f4817ba33b5 100644
--- a/src/test/compile-fail/unreachable-try-pattern.rs
+++ b/src/test/compile-fail/unreachable-try-pattern.rs
@@ -12,6 +12,14 @@
 #![deny(unreachable_code)]
 #![deny(unreachable_patterns)]
 
+enum Void {}
+
+impl From<Void> for i32 {
+    fn from(v: Void) -> i32 {
+        match v {}
+    }
+}
+
 fn bar(x: Result<!, i32>) -> Result<u32, i32> {
     x?
 }
@@ -23,8 +31,20 @@ fn foo(x: Result<!, i32>) -> Result<u32, i32> {
     Ok(y)
 }
 
+fn qux(x: Result<u32, Void>) -> Result<u32, i32> {
+    Ok(x?)
+}
+
+fn vom(x: Result<u32, Void>) -> Result<u32, i32> {
+    let y = (match x { Ok(n) => Ok(n), Err(e) => Err(e) })?;
+    //~^ ERROR unreachable pattern
+    Ok(y)
+}
+
 fn main() {
     let _ = bar(Err(123));
     let _ = foo(Err(123));
+    let _ = qux(Ok(123));
+    let _ = vom(Ok(123));
 }