From 779308a5e123e9346ac0ac53771fa20240be2d5e Mon Sep 17 00:00:00 2001 From: Aaron Hill Date: Thu, 4 Jul 2019 14:20:04 -0400 Subject: [PATCH] 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. --- src/librustc_typeck/check/generator_interior.rs | 2 +- src/test/ui/async-await/async-error-span.rs | 17 +++++++++++++++++ src/test/ui/async-await/async-error-span.stderr | 15 +++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/test/ui/async-await/async-error-span.rs create mode 100644 src/test/ui/async-await/async-error-span.stderr 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 { + 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`.