auto merge of #16675 : luqmana/rust/pmu, r=alexcrichton

Fixes #16671.
This commit is contained in:
bors 2014-08-23 08:10:47 +00:00
commit a284240783
3 changed files with 34 additions and 5 deletions

View File

@ -70,18 +70,19 @@ impl<'a> RestrictionsContext<'a> {
mc::cat_arg(local_id) => {
// R-Variable, locally declared
let lp = Rc::new(LpVar(local_id));
SafeIf(lp.clone(), vec!(lp))
SafeIf(lp.clone(), vec![lp])
}
mc::cat_upvar(upvar_id, _) => {
// R-Variable, captured into closure
let lp = Rc::new(LpUpvar(upvar_id));
SafeIf(lp.clone(), vec!(lp))
SafeIf(lp.clone(), vec![lp])
}
mc::cat_copied_upvar(..) => {
// FIXME(#2152) allow mutation of upvars
Safe
mc::cat_copied_upvar(mc::CopiedUpvar { upvar_id, .. }) => {
// R-Variable, copied/moved into closure
let lp = Rc::new(LpVar(upvar_id));
SafeIf(lp.clone(), vec![lp])
}
mc::cat_downcast(cmt_base) => {

View File

@ -12,4 +12,8 @@ fn main() {
let x = 1i;
proc() { x = 2; };
//~^ ERROR: cannot assign to immutable captured outer variable in a proc `x`
let s = std::io::stdin();
proc() { s.lines(); };
//~^ ERROR: cannot borrow immutable captured outer variable in a proc `s` as mutable
}

View File

@ -0,0 +1,24 @@
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![forbid(warnings)]
// Pretty printing tests complain about `use std::predule::*`
#![allow(unused_imports)]
// A var moved into a proc, that has a mutable loan path should
// not trigger a misleading unused_mut warning.
pub fn main() {
let mut stdin = std::io::stdin();
spawn(proc() {
let _ = stdin.lines();
});
}