@@ -18,6 +18,7 @@ struct InteriorVisitor<'a, 'tcx> {
18
18
region_scope_tree : & ' tcx region:: ScopeTree ,
19
19
expr_count : usize ,
20
20
kind : hir:: GeneratorKind ,
21
+ prev_unresolved_span : Option < Span > ,
21
22
}
22
23
23
24
impl < ' a , ' tcx > InteriorVisitor < ' a , ' tcx > {
@@ -68,9 +69,12 @@ impl<'a, 'tcx> InteriorVisitor<'a, 'tcx> {
68
69
yield_data. source) ;
69
70
70
71
// 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
+ ) ;
71
75
self . fcx . need_type_info_err_in_generator (
72
76
self . kind ,
73
- unresolved_type_span . unwrap_or ( source_span ) ,
77
+ span ,
74
78
unresolved_type,
75
79
)
76
80
. span_note ( yield_data. span , & * note)
@@ -89,9 +93,11 @@ impl<'a, 'tcx> InteriorVisitor<'a, 'tcx> {
89
93
debug ! ( "no type in expr = {:?}, count = {:?}, span = {:?}" ,
90
94
expr, self . expr_count, expr. map( |e| e. span) ) ;
91
95
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) {
93
98
debug ! ( "remained unresolved_type = {:?}, unresolved_type_span: {:?}" ,
94
99
unresolved_type, unresolved_type_span) ;
100
+ self . prev_unresolved_span = unresolved_type_span;
95
101
}
96
102
}
97
103
}
@@ -111,6 +117,7 @@ pub fn resolve_interior<'a, 'tcx>(
111
117
region_scope_tree : fcx. tcx . region_scope_tree ( def_id) ,
112
118
expr_count : 0 ,
113
119
kind,
120
+ prev_unresolved_span : None ,
114
121
} ;
115
122
intravisit:: walk_body ( & mut visitor, body) ;
116
123
0 commit comments