@@ -650,19 +650,28 @@ impl UseSpans<'_> {
650650 pub ( super ) fn var_subdiag (
651651 self ,
652652 err : & mut Diagnostic ,
653- f : impl Fn ( Span ) -> crate :: session_diagnostics :: CaptureVarCause ,
654- kind_desc : impl Into < String > ,
653+ kind : Option < rustc_middle :: mir :: BorrowKind > ,
654+ f : impl Fn ( Option < GeneratorKind > , Span ) -> crate :: session_diagnostics :: CaptureVarCause ,
655655 ) {
656- if let UseSpans :: ClosureUse { capture_kind_span, path_span, .. } = self {
657- if capture_kind_span == path_span {
658- err. subdiagnostic ( f ( capture_kind_span) ) ;
659- } else {
660- err. subdiagnostic ( crate :: session_diagnostics:: CaptureVarKind {
661- kind_desc : kind_desc. into ( ) ,
662- kind_span : capture_kind_span,
656+ use crate :: session_diagnostics:: CaptureVarKind :: * ;
657+ if let UseSpans :: ClosureUse { generator_kind, capture_kind_span, path_span, .. } = self {
658+ if capture_kind_span != path_span {
659+ err. subdiagnostic ( match kind {
660+ Some ( kd) => match kd {
661+ rustc_middle:: mir:: BorrowKind :: Shared
662+ | rustc_middle:: mir:: BorrowKind :: Shallow
663+ | rustc_middle:: mir:: BorrowKind :: Unique => {
664+ Immute { kind_span : capture_kind_span }
665+ }
666+
667+ rustc_middle:: mir:: BorrowKind :: Mut { .. } => {
668+ Mut { kind_span : capture_kind_span }
669+ }
670+ } ,
671+ None => Move { kind_span : capture_kind_span } ,
663672 } ) ;
664- err . subdiagnostic ( f ( path_span ) ) ;
665- }
673+ } ;
674+ err . subdiagnostic ( f ( generator_kind , path_span ) ) ;
666675 }
667676 }
668677
0 commit comments