diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2012-08-23 14:46:59 -0700 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2012-08-23 18:54:08 -0700 |
| commit | a08f3a7d4d937c2b26c8a29edabe7fb089d0b5f7 (patch) | |
| tree | 778e2d94eca68fd3e579b2ad8ac2725602afe340 /src/rustc | |
| parent | 83e7c869bdfadf0ed8aca92e76fc5073b63402e2 (diff) | |
| download | rust-a08f3a7d4d937c2b26c8a29edabe7fb089d0b5f7.tar.gz rust-a08f3a7d4d937c2b26c8a29edabe7fb089d0b5f7.zip | |
More complete fix to #3162 (borrowck bug related to access to rec fields)
Diffstat (limited to 'src/rustc')
| -rw-r--r-- | src/rustc/middle/borrowck/check_loans.rs | 15 | ||||
| -rw-r--r-- | src/rustc/middle/resolve3.rs | 2 | ||||
| -rw-r--r-- | src/rustc/middle/trans/type_use.rs | 9 |
3 files changed, 9 insertions, 17 deletions
diff --git a/src/rustc/middle/borrowck/check_loans.rs b/src/rustc/middle/borrowck/check_loans.rs index 885d8a65046..6db7297618b 100644 --- a/src/rustc/middle/borrowck/check_loans.rs +++ b/src/rustc/middle/borrowck/check_loans.rs @@ -326,19 +326,8 @@ impl check_loan_ctxt { // even to data owned by the current stack frame. This is // because that aliasable data might have been located on // the current stack frame, we don't know. - match cmt.lp { - some(@lp_local(*)) | some(@lp_arg(*)) => { - // it's ok to mutate a local variable, as it is either - // lent our or not. The problem arises when you have - // some subcomponent that might have been lent out - // through an alias on the condition that you ensure - // purity. - } - none | some(@lp_comp(*)) | some(@lp_deref(*)) => { - self.report_purity_error( - pc, ex.span, at.ing_form(self.bccx.cmt_to_str(cmt))); - } - } + self.report_purity_error( + pc, ex.span, at.ing_form(self.bccx.cmt_to_str(cmt))); } some(pc_pure_fn) => { if cmt.lp.is_none() { diff --git a/src/rustc/middle/resolve3.rs b/src/rustc/middle/resolve3.rs index 68d2b145829..da6b0b5087b 100644 --- a/src/rustc/middle/resolve3.rs +++ b/src/rustc/middle/resolve3.rs @@ -2065,7 +2065,7 @@ struct Resolver { str_of(name))); return Failed; } - ModuleDef(module_) => { + ModuleDef(copy module_) => { search_module = module_; } } diff --git a/src/rustc/middle/trans/type_use.rs b/src/rustc/middle/trans/type_use.rs index 004de82e064..ce84269bb67 100644 --- a/src/rustc/middle/trans/type_use.rs +++ b/src/rustc/middle/trans/type_use.rs @@ -116,10 +116,13 @@ fn type_uses_for(ccx: @crate_ctxt, fn_id: def_id, n_tps: uint) } fn type_needs(cx: ctx, use: uint, ty: ty::t) { - let mut done = true; // Optimization -- don't descend type if all params already have this use - for vec::each(cx.uses) |u| { if u & use != use { done = false } } - if !done { type_needs_inner(cx, use, ty, @nil); } + for vec::each_mut(cx.uses) |u| { + if *u & use != use { + type_needs_inner(cx, use, ty, @nil); + return; + } + } } fn type_needs_inner(cx: ctx, use: uint, ty: ty::t, |
