@@ -336,15 +336,15 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {
336336 if def_id. as_local ( ) == Some ( self . mir_def_id ( ) ) && upvar_field. is_some ( ) =>
337337 {
338338 let closure_kind_ty = closure_substs. as_closure ( ) . kind_ty ( ) ;
339- let closure_kind = closure_kind_ty. to_opt_closure_kind ( ) ;
340- let capture_description = match closure_kind {
341- Some ( ty:: ClosureKind :: Fn ) => "captured variable in an `Fn` closure" ,
342- Some ( ty:: ClosureKind :: FnMut ) => "captured variable in an `FnMut` closure" ,
339+ let closure_kind = match closure_kind_ty. to_opt_closure_kind ( ) {
340+ Some ( kind @ ( ty:: ClosureKind :: Fn | ty:: ClosureKind :: FnMut ) ) => kind,
343341 Some ( ty:: ClosureKind :: FnOnce ) => {
344342 bug ! ( "closure kind does not match first argument type" )
345343 }
346344 None => bug ! ( "closure kind not inferred by borrowck" ) ,
347345 } ;
346+ let capture_description =
347+ format ! ( "captured variable in an `{}` closure" , closure_kind) ;
348348
349349 let upvar = & self . upvars [ upvar_field. unwrap ( ) . index ( ) ] ;
350350 let upvar_hir_id = upvar. place . get_root_variable ( ) ;
@@ -368,6 +368,10 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {
368368 let mut diag = self . cannot_move_out_of ( span, & place_description) ;
369369
370370 diag. span_label ( upvar_span, "captured outer variable" ) ;
371+ diag. span_label (
372+ self . body . span ,
373+ format ! ( "captured by this `{}` closure" , closure_kind) ,
374+ ) ;
371375
372376 diag
373377 }
0 commit comments