diff options
| author | Aaron Hill <aa1ronham@gmail.com> | 2019-07-04 14:20:04 -0400 |
|---|---|---|
| committer | Aaron Hill <aa1ronham@gmail.com> | 2019-07-04 14:22:47 -0400 |
| commit | 779308a5e123e9346ac0ac53771fa20240be2d5e (patch) | |
| tree | e19897208fb28080e1dd9e0dfa031143b4726f9d | |
| parent | b43eb4235ac43c822d903ad26ed806f34cc1a14a (diff) | |
| download | rust-779308a5e123e9346ac0ac53771fa20240be2d5e.tar.gz rust-779308a5e123e9346ac0ac53771fa20240be2d5e.zip | |
Improve error span for async type inference error
Fixes #62382 Previously, we would point at the spawn of the 'await' expression, instead of the actual expression with an unknown type.
| -rw-r--r-- | src/librustc_typeck/check/generator_interior.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/async-await/async-error-span.rs | 17 | ||||
| -rw-r--r-- | src/test/ui/async-await/async-error-span.stderr | 15 |
3 files changed, 33 insertions, 1 deletions
diff --git a/src/librustc_typeck/check/generator_interior.rs b/src/librustc_typeck/check/generator_interior.rs index 0bd078dace4..7e4768d81b8 100644 --- a/src/librustc_typeck/check/generator_interior.rs +++ b/src/librustc_typeck/check/generator_interior.rs @@ -75,7 +75,7 @@ impl<'a, 'tcx> InteriorVisitor<'a, 'tcx> { // If unresolved type isn't a ty_var then unresolved_type_span is None self.fcx.need_type_info_err_in_generator( self.kind, - unresolved_type_span.unwrap_or(yield_data.span), + unresolved_type_span.unwrap_or(source_span), unresolved_type, ) .span_note(yield_data.span, &*note) diff --git a/src/test/ui/async-await/async-error-span.rs b/src/test/ui/async-await/async-error-span.rs new file mode 100644 index 00000000000..d362348a3fd --- /dev/null +++ b/src/test/ui/async-await/async-error-span.rs @@ -0,0 +1,17 @@ +// edition:2018 +#![feature(async_await)] + +// Regression test for issue #62382 + +use std::future::Future; + +fn get_future() -> impl Future<Output = ()> { + panic!() +} + +async fn foo() { + let a; //~ ERROR type inside `async` object must be known in this context + get_future().await; +} + +fn main() {} diff --git a/src/test/ui/async-await/async-error-span.stderr b/src/test/ui/async-await/async-error-span.stderr new file mode 100644 index 00000000000..bd8966b9c7d --- /dev/null +++ b/src/test/ui/async-await/async-error-span.stderr @@ -0,0 +1,15 @@ +error[E0698]: type inside `async` object must be known in this context + --> $DIR/async-error-span.rs:13:9 + | +LL | let a; + | ^ cannot infer type + | +note: the type is part of the `async` object because of this `await` + --> $DIR/async-error-span.rs:14:5 + | +LL | get_future().await; + | ^^^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0698`. |
