Skip to content

Commit

Permalink
Test try diagnostics for impl and trait methods
Browse files Browse the repository at this point in the history
Signed-off-by: Philipp Gesang <phg@phi-gamma.net>
  • Loading branch information
phi-gamma committed Jan 21, 2020
1 parent 5dee7dd commit 02e66ba
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 1 deletion.
29 changes: 29 additions & 0 deletions src/test/ui/try-on-option-diagnostics.rs
Expand Up @@ -16,3 +16,32 @@ fn a_closure() -> u32 {
};
a_closure()
}

fn a_method() -> u32 {
struct S;

impl S {
fn a_method() {
let x: Option<u32> = None;
x?; //~ ERROR the `?` operator
}
}

S::a_method();
22
}

fn a_trait_method() -> u32 {
struct S;
trait T {
fn a_trait_method() {
let x: Option<u32> = None;
x?; //~ ERROR the `?` operator
}
}

impl T for S { }

S::a_trait_method();
22
}
28 changes: 27 additions & 1 deletion src/test/ui/try-on-option-diagnostics.stderr
Expand Up @@ -27,6 +27,32 @@ LL | | };
= help: the trait `std::ops::Try` is not implemented for `{integer}`
= note: required by `std::ops::Try::from_error`

error: aborting due to 2 previous errors
error[E0277]: the `?` operator can only be used in a method that returns `Result` or `Option` (or another type that implements `std::ops::Try`)
--> $DIR/try-on-option-diagnostics.rs:26:13
|
LL | / fn a_method() {
LL | | let x: Option<u32> = None;
LL | | x?;
| | ^^ cannot use the `?` operator in a method that returns `()`
LL | | }
| |_________- this function should return `Result` or `Option` to accept `?`
|
= help: the trait `std::ops::Try` is not implemented for `()`
= note: required by `std::ops::Try::from_error`

error[E0277]: the `?` operator can only be used in a trait method that returns `Result` or `Option` (or another type that implements `std::ops::Try`)
--> $DIR/try-on-option-diagnostics.rs:39:13
|
LL | / fn a_trait_method() {
LL | | let x: Option<u32> = None;
LL | | x?;
| | ^^ cannot use the `?` operator in a trait method that returns `()`
LL | | }
| |_________- this function should return `Result` or `Option` to accept `?`
|
= help: the trait `std::ops::Try` is not implemented for `()`
= note: required by `std::ops::Try::from_error`

error: aborting due to 4 previous errors

For more information about this error, try `rustc --explain E0277`.

0 comments on commit 02e66ba

Please sign in to comment.