Skip to content

Commit 2877e47

Browse files
committed
Ensure unboxed closure upvars are marked as used mutably
Closes rust-lang#18336
1 parent f168c12 commit 2877e47

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

src/librustc/middle/borrowck/check_loans.rs

+9-1
Original file line numberDiff line numberDiff line change
@@ -825,12 +825,20 @@ impl<'a, 'tcx> CheckLoanCtxt<'a, 'tcx> {
825825
mc::cat_rvalue(..) |
826826
mc::cat_static_item |
827827
mc::cat_deref(_, _, mc::UnsafePtr(..)) |
828-
mc::cat_deref(_, _, mc::BorrowedPtr(..)) |
829828
mc::cat_deref(_, _, mc::Implicit(..)) => {
830829
assert_eq!(cmt.mutbl, mc::McDeclared);
831830
return;
832831
}
833832

833+
mc::cat_deref(_, _, mc::BorrowedPtr(..)) => {
834+
assert_eq!(cmt.mutbl, mc::McDeclared);
835+
// We need to drill down to upvar if applicable
836+
match cmt.upvar() {
837+
Some(b) => cmt = b,
838+
None => return
839+
}
840+
}
841+
834842
mc::cat_discr(b, _) |
835843
mc::cat_deref(b, _, mc::OwnedPtr) => {
836844
assert_eq!(cmt.mutbl, mc::McInherited);

0 commit comments

Comments
 (0)