diff options
| author | Philipp Gesang <phg@phi-gamma.net> | 2020-01-21 21:51:13 +0100 |
|---|---|---|
| committer | Philipp Gesang <phg@phi-gamma.net> | 2020-01-21 18:56:56 +0100 |
| commit | 02e66baac6882ef30e607d2bca98929f01758957 (patch) | |
| tree | e9f63b4a2306dbe3095832a08ee8d31605e626ef | |
| parent | 5dee7dddf24a022184a743b714b5062e83516a87 (diff) | |
| download | rust-02e66baac6882ef30e607d2bca98929f01758957.tar.gz rust-02e66baac6882ef30e607d2bca98929f01758957.zip | |
Test try diagnostics for impl and trait methods
Signed-off-by: Philipp Gesang <phg@phi-gamma.net>
| -rw-r--r-- | src/test/ui/try-on-option-diagnostics.rs | 29 | ||||
| -rw-r--r-- | src/test/ui/try-on-option-diagnostics.stderr | 28 |
2 files changed, 56 insertions, 1 deletions
diff --git a/src/test/ui/try-on-option-diagnostics.rs b/src/test/ui/try-on-option-diagnostics.rs index 65d5e29ec2f..63d17414c31 100644 --- a/src/test/ui/try-on-option-diagnostics.rs +++ b/src/test/ui/try-on-option-diagnostics.rs @@ -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 +} diff --git a/src/test/ui/try-on-option-diagnostics.stderr b/src/test/ui/try-on-option-diagnostics.stderr index ce3aca39fb8..c9dc3f1b879 100644 --- a/src/test/ui/try-on-option-diagnostics.stderr +++ b/src/test/ui/try-on-option-diagnostics.stderr @@ -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`. |
