diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2013-05-14 09:26:21 -0400 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2013-05-14 09:26:21 -0400 |
| commit | d204cfd739bfecb6252b54c5007a28559d0f9a73 (patch) | |
| tree | 144e2720cf3d8105ded384c851db1f69b4efe8b4 | |
| parent | 5a2f65fb5035627b8fb0b1ce0e927a492d55e3a4 (diff) | |
| download | rust-d204cfd739bfecb6252b54c5007a28559d0f9a73.tar.gz rust-d204cfd739bfecb6252b54c5007a28559d0f9a73.zip | |
Issue #5967: Make rvalues mutable
| -rw-r--r-- | src/librustc/middle/borrowck/gather_loans/lifetime.rs | 10 | ||||
| -rw-r--r-- | src/librustc/middle/mem_categorization.rs | 2 |
2 files changed, 10 insertions, 2 deletions
diff --git a/src/librustc/middle/borrowck/gather_loans/lifetime.rs b/src/librustc/middle/borrowck/gather_loans/lifetime.rs index 330d60a59d3..b0ddf2057d9 100644 --- a/src/librustc/middle/borrowck/gather_loans/lifetime.rs +++ b/src/librustc/middle/borrowck/gather_loans/lifetime.rs @@ -93,7 +93,7 @@ impl GuaranteeLifetimeContext { let omit_root = ( ptr_mutbl == m_imm && self.bccx.is_subregion_of(self.loan_region, base_scope) && - base.mutbl.is_immutable() && + self.is_rvalue_or_immutable(base) && !self.is_moved(base) ); @@ -168,6 +168,14 @@ impl GuaranteeLifetimeContext { } } + fn is_rvalue_or_immutable(&self, + cmt: mc::cmt) -> bool { + cmt.mutbl.is_immutable() || match cmt.guarantor().cat { + mc::cat_rvalue => true, + _ => false + } + } + fn check_root(&self, cmt_deref: mc::cmt, cmt_base: mc::cmt, diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index 95ed7fe8efc..91c0b8e61cc 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -551,7 +551,7 @@ pub impl mem_categorization_ctxt { id:elt.id(), span:elt.span(), cat:cat_rvalue, - mutbl:McImmutable, + mutbl:McDeclared, ty:expr_ty } } |
