File tree Expand file tree Collapse file tree 1 file changed +13
-1
lines changed Expand file tree Collapse file tree 1 file changed +13
-1
lines changed Original file line number Diff line number Diff line change @@ -4668,15 +4668,27 @@ pub struct UnboxedClosureUpvar {
46684668pub fn unboxed_closure_upvars ( tcx : & ctxt , closure_id : ast:: DefId )
46694669 -> Vec < UnboxedClosureUpvar > {
46704670 if closure_id. krate == ast:: LOCAL_CRATE {
4671+ let capture_mode = tcx. capture_modes . borrow ( ) . get_copy ( & closure_id. node ) ;
46714672 match tcx. freevars . borrow ( ) . find ( & closure_id. node ) {
46724673 None => vec ! [ ] ,
46734674 Some ( ref freevars) => {
46744675 freevars. iter ( ) . map ( |freevar| {
46754676 let freevar_def_id = freevar. def . def_id ( ) ;
4677+ let mut freevar_ty = node_id_to_type ( tcx, freevar_def_id. node ) ;
4678+ if capture_mode == ast:: CaptureByRef {
4679+ let borrow = tcx. upvar_borrow_map . borrow ( ) . get_copy ( & ty:: UpvarId {
4680+ var_id : freevar_def_id. node ,
4681+ closure_expr_id : closure_id. node
4682+ } ) ;
4683+ freevar_ty = mk_rptr ( tcx, borrow. region , ty:: mt {
4684+ ty : freevar_ty,
4685+ mutbl : borrow. kind . to_mutbl_lossy ( )
4686+ } ) ;
4687+ }
46764688 UnboxedClosureUpvar {
46774689 def : freevar. def ,
46784690 span : freevar. span ,
4679- ty : node_id_to_type ( tcx , freevar_def_id . node ) ,
4691+ ty : freevar_ty
46804692 }
46814693 } ) . collect ( )
46824694 }
You can’t perform that action at this time.
0 commit comments