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 {
4668
4668
pub fn unboxed_closure_upvars ( tcx : & ctxt , closure_id : ast:: DefId )
4669
4669
-> Vec < UnboxedClosureUpvar > {
4670
4670
if closure_id. krate == ast:: LOCAL_CRATE {
4671
+ let capture_mode = tcx. capture_modes . borrow ( ) . get_copy ( & closure_id. node ) ;
4671
4672
match tcx. freevars . borrow ( ) . find ( & closure_id. node ) {
4672
4673
None => vec ! [ ] ,
4673
4674
Some ( ref freevars) => {
4674
4675
freevars. iter ( ) . map ( |freevar| {
4675
4676
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
+ }
4676
4688
UnboxedClosureUpvar {
4677
4689
def : freevar. def ,
4678
4690
span : freevar. span ,
4679
- ty : node_id_to_type ( tcx , freevar_def_id . node ) ,
4691
+ ty : freevar_ty
4680
4692
}
4681
4693
} ) . collect ( )
4682
4694
}
You can’t perform that action at this time.
0 commit comments