about summary refs log tree commit diff
diff options
context:
space:
mode:
authorScott McMurray <scottmcm@users.noreply.github.com>2018-04-03 00:04:23 -0700
committerScott McMurray <scottmcm@users.noreply.github.com>2018-04-10 20:03:40 -0700
commitaeb2353df54b2ca5fe0980766a023e028a0afa35 (patch)
treee24566a81e18622d9d14dc4419ca1d39ac0e8386
parentc4b6521327d6662cbfa245a285bed1764692c4b2 (diff)
downloadrust-aeb2353df54b2ca5fe0980766a023e028a0afa35.tar.gz
rust-aeb2353df54b2ca5fe0980766a023e028a0afa35.zip
Add a UI test that the span for the catch type error is in the right place
-rw-r--r--src/test/ui/catch-block-type-error.rs26
-rw-r--r--src/test/ui/catch-block-type-error.stderr25
2 files changed, 51 insertions, 0 deletions
diff --git a/src/test/ui/catch-block-type-error.rs b/src/test/ui/catch-block-type-error.rs
new file mode 100644
index 00000000000..c7739f6c5f8
--- /dev/null
+++ b/src/test/ui/catch-block-type-error.rs
@@ -0,0 +1,26 @@
+// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![feature(catch_expr)]
+
+fn foo() -> Option<()> { Some(()) }
+
+fn main() {
+    let _: Option<f32> = do catch {
+        foo()?;
+        42
+        //~^ ERROR type mismatch
+    };
+
+    let _: Option<i32> = do catch {
+        //~^ ERROR type mismatch
+        foo()?;
+    };
+}
diff --git a/src/test/ui/catch-block-type-error.stderr b/src/test/ui/catch-block-type-error.stderr
new file mode 100644
index 00000000000..9634efe2cd8
--- /dev/null
+++ b/src/test/ui/catch-block-type-error.stderr
@@ -0,0 +1,25 @@
+error[E0271]: type mismatch resolving `<std::option::Option<f32> as std::ops::Try>::Ok == {integer}`
+  --> $DIR/catch-block-type-error.rs:18:9
+   |
+LL |         42
+   |         ^^ expected f32, found integral variable
+   |
+   = note: expected type `f32`
+              found type `{integer}`
+
+error[E0271]: type mismatch resolving `<std::option::Option<i32> as std::ops::Try>::Ok == ()`
+  --> $DIR/catch-block-type-error.rs:22:35
+   |
+LL |       let _: Option<i32> = do catch {
+   |  ___________________________________^
+LL | |         //~^ ERROR type mismatch
+LL | |         foo()?;
+LL | |     };
+   | |_____^ expected i32, found ()
+   |
+   = note: expected type `i32`
+              found type `()`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0271`.