err: &mut DiagnosticBuilder<'_>,
target_span: Span,
scope_span: &Option<Span>,
- await_span: Span,
+ yield_span: Option<Span>,
expr: Option<hir::HirId>,
snippet: String,
inner_generator_body: Option<&hir::Body<'_>>,
let tables: &TypeckTables<'tcx> = match &in_progress_tables {
Some(t) if t.hir_owner.map(|owner| owner.to_def_id()) == Some(generator_did_root) => t,
_ => {
- query_tables = self.tcx.typeck_tables_of(generator_did);
+ query_tables = self.tcx.typeck_tables_of(generator_did.expect_local());
&query_tables
}
};
err: &mut DiagnosticBuilder<'_>,
target_span: Span,
scope_span: &Option<Span>,
- yield_span: Span,
+ yield_span: Option<Span>,
expr: Option<hir::HirId>,
snippet: String,
inner_generator_body: Option<&hir::Body<'_>>,
"note_obligation_cause_for_async_await generator_interior_types: {:#?}",
tables.generator_interior_types
);
- let mut span = MultiSpan::from_span(yield_span);
- span.push_span_label(
- yield_span,
- format!("{} occurs here, with `{}` maybe used later", await_or_yield, snippet),
- );
- span.push_span_label(
- target_span,
- format!("has type `{}` which {}", target_ty, trait_explanation),
- );
+ if let Some(yield_span) = yield_span {
+ let mut span = MultiSpan::from_span(yield_span);
+ span.push_span_label(
+ yield_span,
+ format!("{} occurs here, with `{}` maybe used later", await_or_yield, snippet),
+ );
- // If available, use the scope span to annotate the drop location.
- if let Some(scope_span) = scope_span {
span.push_span_label(
- source_map.end_point(*scope_span),
- format!("`{}` is later dropped here", snippet),
+ target_span,
+ format!("has type `{}` which {}", target_ty, trait_explanation),
);
- }
- err.span_note(
- span,
- &format!(
- "{} {} as this value is used across {}",
- future_or_generator, trait_explanation, an_await_or_yield
- ),
- );
+ // If available, use the scope span to annotate the drop location.
+ if let Some(scope_span) = scope_span {
+ span.push_span_label(
+ source_map.end_point(*scope_span),
+ format!("`{}` is later dropped here", snippet),
+ );
+ }
+
+ err.span_note(
+ span,
+ &format!(
+ "{} {} as this value is used across {}",
+ future_or_generator, trait_explanation, an_await_or_yield
+ ),
+ );
+ }
}
if let Some(expr_id) = expr {