Skip to content

Commit c337cb2

Browse files
committed
record previous unresolve span for generator error reporting
1 parent add21c4 commit c337cb2

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

src/librustc/hir/mod.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1833,9 +1833,9 @@ impl fmt::Display for YieldSource {
18331833
}
18341834
}
18351835

1836-
impl core::convert::From<GeneratorKind> for YieldSource {
1837-
fn from(gen_kind: GeneratorKind) -> Self {
1838-
match gen_kind {
1836+
impl From<GeneratorKind> for YieldSource {
1837+
fn from(kind: GeneratorKind) -> Self {
1838+
match kind {
18391839
// Guess based on the kind of the current generator.
18401840
GeneratorKind::Gen => Self::Yield,
18411841
GeneratorKind::Async(_) => Self::Await,

src/librustc_typeck/check/generator_interior.rs

+9-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ struct InteriorVisitor<'a, 'tcx> {
1818
region_scope_tree: &'tcx region::ScopeTree,
1919
expr_count: usize,
2020
kind: hir::GeneratorKind,
21+
prev_unresolved_span: Option<Span>,
2122
}
2223

2324
impl<'a, 'tcx> InteriorVisitor<'a, 'tcx> {
@@ -68,9 +69,12 @@ impl<'a, 'tcx> InteriorVisitor<'a, 'tcx> {
6869
yield_data.source);
6970

7071
// If unresolved type isn't a ty_var then unresolved_type_span is None
72+
let span = self.prev_unresolved_span.unwrap_or_else(
73+
|| unresolved_type_span.unwrap_or(source_span)
74+
);
7175
self.fcx.need_type_info_err_in_generator(
7276
self.kind,
73-
unresolved_type_span.unwrap_or(source_span),
77+
span,
7478
unresolved_type,
7579
)
7680
.span_note(yield_data.span, &*note)
@@ -89,9 +93,11 @@ impl<'a, 'tcx> InteriorVisitor<'a, 'tcx> {
8993
debug!("no type in expr = {:?}, count = {:?}, span = {:?}",
9094
expr, self.expr_count, expr.map(|e| e.span));
9195
let ty = self.fcx.resolve_vars_if_possible(&ty);
92-
if let Some((unresolved_type, unresolved_type_span)) = self.fcx.unresolved_type_vars(&ty) {
96+
if let Some((unresolved_type, unresolved_type_span))
97+
= self.fcx.unresolved_type_vars(&ty) {
9398
debug!("remained unresolved_type = {:?}, unresolved_type_span: {:?}",
9499
unresolved_type, unresolved_type_span);
100+
self.prev_unresolved_span = unresolved_type_span;
95101
}
96102
}
97103
}
@@ -111,6 +117,7 @@ pub fn resolve_interior<'a, 'tcx>(
111117
region_scope_tree: fcx.tcx.region_scope_tree(def_id),
112118
expr_count: 0,
113119
kind,
120+
prev_unresolved_span: None,
114121
};
115122
intravisit::walk_body(&mut visitor, body);
116123

0 commit comments

Comments
 (0)