diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-06-06 08:37:01 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-06-06 08:37:01 +0200 |
| commit | df86d04977aeda80c9e599cf6ce197b46a0dea2f (patch) | |
| tree | 320bcffe3994867279ddeb5e971946f41aae2c72 /src | |
| parent | f2b3808920bdb8803acc04a8946e1d99edaf7514 (diff) | |
| parent | d268b34da48373a54a3f4666b3b83277ad8f9db3 (diff) | |
| download | rust-df86d04977aeda80c9e599cf6ce197b46a0dea2f.tar.gz rust-df86d04977aeda80c9e599cf6ce197b46a0dea2f.zip | |
Rollup merge of #97721 - compiler-errors:issue-97704, r=jackh726
Do `suggest_await_before_try` with infer variables in self, and clean up binders Fixes #97704 Also cleans up binders in this fn, since everything is a `Poly*` and we really shouldn't have stray escaping late-bound regions everywhere. That's why the function changed so much. This isn't necessary, so I can revert if necessary.
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/suggestions/issue-97704.fixed | 19 | ||||
| -rw-r--r-- | src/test/ui/suggestions/issue-97704.rs | 19 | ||||
| -rw-r--r-- | src/test/ui/suggestions/issue-97704.stderr | 15 |
3 files changed, 53 insertions, 0 deletions
diff --git a/src/test/ui/suggestions/issue-97704.fixed b/src/test/ui/suggestions/issue-97704.fixed new file mode 100644 index 00000000000..c42bdfff5f9 --- /dev/null +++ b/src/test/ui/suggestions/issue-97704.fixed @@ -0,0 +1,19 @@ +// edition:2021 +// run-rustfix + +#![allow(unused)] + +use std::future::Future; + +async fn foo() -> Result<(), i32> { + func(async { Ok::<_, i32>(()) }).await?; + //~^ ERROR the `?` operator can only be applied to values that implement `Try` + + Ok(()) +} + +async fn func<T>(fut: impl Future<Output = T>) -> T { + fut.await +} + +fn main() {} diff --git a/src/test/ui/suggestions/issue-97704.rs b/src/test/ui/suggestions/issue-97704.rs new file mode 100644 index 00000000000..5dfee6cac60 --- /dev/null +++ b/src/test/ui/suggestions/issue-97704.rs @@ -0,0 +1,19 @@ +// edition:2021 +// run-rustfix + +#![allow(unused)] + +use std::future::Future; + +async fn foo() -> Result<(), i32> { + func(async { Ok::<_, i32>(()) })?; + //~^ ERROR the `?` operator can only be applied to values that implement `Try` + + Ok(()) +} + +async fn func<T>(fut: impl Future<Output = T>) -> T { + fut.await +} + +fn main() {} diff --git a/src/test/ui/suggestions/issue-97704.stderr b/src/test/ui/suggestions/issue-97704.stderr new file mode 100644 index 00000000000..ca017be45ac --- /dev/null +++ b/src/test/ui/suggestions/issue-97704.stderr @@ -0,0 +1,15 @@ +error[E0277]: the `?` operator can only be applied to values that implement `Try` + --> $DIR/issue-97704.rs:9:5 + | +LL | func(async { Ok::<_, i32>(()) })?; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the `?` operator cannot be applied to type `impl Future<Output = Result<(), i32>>` + | + = help: the trait `Try` is not implemented for `impl Future<Output = Result<(), i32>>` +help: consider `await`ing on the `Future` + | +LL | func(async { Ok::<_, i32>(()) }).await?; + | ++++++ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0277`. |
