@@ -650,19 +650,28 @@ impl UseSpans<'_> {
650
650
pub ( super ) fn var_subdiag (
651
651
self ,
652
652
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 ,
655
655
) {
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 } ,
663
672
} ) ;
664
- err . subdiagnostic ( f ( path_span ) ) ;
665
- }
673
+ } ;
674
+ err . subdiagnostic ( f ( generator_kind , path_span ) ) ;
666
675
}
667
676
}
668
677
0 commit comments