From 77bdb354bfe1a26ba90b2889702e647c3d9c8d7e Mon Sep 17 00:00:00 2001 From: David Wood Date: Mon, 8 Apr 2019 00:19:58 +0200 Subject: [PATCH] Add test demonstrating existing behaviour. This commit adds a test that demonstrates the compiler's current behaviour when a function attempts to return a value that was unwrapped by a `?` operator when the omission of `?` would have made the code compile. --- src/test/ui/issue-59756.rs | 15 +++++++++++++++ src/test/ui/issue-59756.stderr | 12 ++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 src/test/ui/issue-59756.rs create mode 100644 src/test/ui/issue-59756.stderr diff --git a/src/test/ui/issue-59756.rs b/src/test/ui/issue-59756.rs new file mode 100644 index 000000000000..2ce969432755 --- /dev/null +++ b/src/test/ui/issue-59756.rs @@ -0,0 +1,15 @@ +#![allow(warnings)] + +struct A; +struct B; + +fn foo() -> Result { + Ok(A) +} + +fn bar() -> Result { + foo()? + //~^ ERROR try expression alternatives have incompatible types [E0308] +} + +fn main() {} diff --git a/src/test/ui/issue-59756.stderr b/src/test/ui/issue-59756.stderr new file mode 100644 index 000000000000..58491cdaa583 --- /dev/null +++ b/src/test/ui/issue-59756.stderr @@ -0,0 +1,12 @@ +error[E0308]: try expression alternatives have incompatible types + --> $DIR/issue-59756.rs:11:5 + | +LL | foo()? + | ^^^^^^ expected enum `std::result::Result`, found struct `A` + | + = note: expected type `std::result::Result` + found type `A` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0308`.