Skip to content

Commit f5281e2

Browse files
committed
Do not make fake types for upvars if we haven't yet inferred whether they are borrowed
or by value.
1 parent bc41cc0 commit f5281e2

File tree

1 file changed

+18
-24
lines changed

1 file changed

+18
-24
lines changed

src/librustc/middle/ty.rs

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5643,32 +5643,26 @@ pub fn closure_upvars<'tcx>(typer: &mc::Typer<'tcx>,
56435643
closure_expr_id: closure_id.node
56445644
};
56455645

5646-
let captured_freevar_ty = match typer.upvar_capture(upvar_id) {
5647-
Some(UpvarCapture::ByValue) => {
5648-
freevar_ty
5649-
}
5650-
5651-
Some(UpvarCapture::ByRef(borrow)) => {
5652-
mk_rptr(tcx,
5653-
tcx.mk_region(borrow.region),
5654-
ty::mt {
5655-
ty: freevar_ty,
5656-
mutbl: borrow.kind.to_mutbl_lossy(),
5657-
})
5658-
}
5646+
typer.upvar_capture(upvar_id).map(|capture| {
5647+
let freevar_ref_ty = match capture {
5648+
UpvarCapture::ByValue => {
5649+
freevar_ty
5650+
}
5651+
UpvarCapture::ByRef(borrow) => {
5652+
mk_rptr(tcx,
5653+
tcx.mk_region(borrow.region),
5654+
ty::mt {
5655+
ty: freevar_ty,
5656+
mutbl: borrow.kind.to_mutbl_lossy(),
5657+
})
5658+
}
5659+
};
56595660

5660-
None => {
5661-
// FIXME(#16640) we should really return None here;
5662-
// but that requires better inference integration,
5663-
// for now gin up something.
5664-
freevar_ty
5661+
ClosureUpvar {
5662+
def: freevar.def,
5663+
span: freevar.span,
5664+
ty: freevar_ref_ty,
56655665
}
5666-
};
5667-
5668-
Some(ClosureUpvar {
5669-
def: freevar.def,
5670-
span: freevar.span,
5671-
ty: captured_freevar_ty,
56725666
})
56735667
})
56745668
.collect()

0 commit comments

Comments
 (0)