diff options
| author | Brian Koropoff <bkoropoff@gmail.com> | 2014-10-25 21:39:34 -0700 |
|---|---|---|
| committer | Brian Koropoff <bkoropoff@gmail.com> | 2014-10-25 21:39:34 -0700 |
| commit | 2877e47ea7409ff4ea820b0a6668111baf441377 (patch) | |
| tree | 83e573a2ce8a9eb0461ebd352b50117a4665601d /src | |
| parent | f168c12c5629afd45c9b3ed250350bf830b99642 (diff) | |
| download | rust-2877e47ea7409ff4ea820b0a6668111baf441377.tar.gz rust-2877e47ea7409ff4ea820b0a6668111baf441377.zip | |
Ensure unboxed closure upvars are marked as used mutably
Closes #18336
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc/middle/borrowck/check_loans.rs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/librustc/middle/borrowck/check_loans.rs b/src/librustc/middle/borrowck/check_loans.rs index 5f09cafb5e2..5d984168a31 100644 --- a/src/librustc/middle/borrowck/check_loans.rs +++ b/src/librustc/middle/borrowck/check_loans.rs @@ -825,12 +825,20 @@ impl<'a, 'tcx> CheckLoanCtxt<'a, 'tcx> { mc::cat_rvalue(..) | mc::cat_static_item | mc::cat_deref(_, _, mc::UnsafePtr(..)) | - mc::cat_deref(_, _, mc::BorrowedPtr(..)) | mc::cat_deref(_, _, mc::Implicit(..)) => { assert_eq!(cmt.mutbl, mc::McDeclared); return; } + mc::cat_deref(_, _, mc::BorrowedPtr(..)) => { + assert_eq!(cmt.mutbl, mc::McDeclared); + // We need to drill down to upvar if applicable + match cmt.upvar() { + Some(b) => cmt = b, + None => return + } + } + mc::cat_discr(b, _) | mc::cat_deref(b, _, mc::OwnedPtr) => { assert_eq!(cmt.mutbl, mc::McInherited); |
