From aff620de1e5e0791b7c91f765cf17f3214848230 Mon Sep 17 00:00:00 2001 From: Flavio Percoco <flaper87@gmail.com> Date: Wed, 23 Apr 2014 00:59:42 +0200 Subject: [PATCH] rustc: Remove moved_variables_set --- src/librustc/driver/driver.rs | 5 +---- src/librustc/middle/borrowck/mod.rs | 3 --- src/librustc/middle/moves.rs | 21 +------------------ .../borrowck-preserve-box-in-field.rs | 2 ++ .../borrowck-preserve-box-in-uniq.rs | 2 ++ .../borrowck-preserve-box.rs | 2 ++ .../borrowck-preserve-cond-box.rs | 4 ++-- .../borrowck-preserve-expl-deref.rs | 2 ++ .../regions-appearance-constraint.rs | 9 ++++---- 9 files changed, 16 insertions(+), 34 deletions(-) rename src/test/{run-pass => compile-fail}/borrowck-preserve-box-in-field.rs (87%) rename src/test/{run-pass => compile-fail}/borrowck-preserve-box-in-uniq.rs (86%) rename src/test/{run-pass => compile-fail}/borrowck-preserve-box.rs (86%) rename src/test/{run-pass => compile-fail}/borrowck-preserve-cond-box.rs (88%) rename src/test/{run-pass => compile-fail}/borrowck-preserve-expl-deref.rs (87%) rename src/test/{run-pass => compile-fail}/regions-appearance-constraint.rs (78%) diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index ebac18086c0..10650b747bd 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -348,8 +348,7 @@ pub fn phase_3_run_analysis_passes(sess: Session, time(time_passes, "effect checking", (), |_| middle::effect::check_crate(&ty_cx, krate)); - let middle::moves::MoveMaps {moves_map, moved_variables_set, - capture_map} = + let middle::moves::MoveMaps {moves_map, capture_map} = time(time_passes, "compute moves", (), |_| middle::moves::compute_moves(&ty_cx, krate)); @@ -361,11 +360,9 @@ pub fn phase_3_run_analysis_passes(sess: Session, time(time_passes, "borrow checking", (), |_| middle::borrowck::check_crate(&ty_cx, &moves_map, - &moved_variables_set, &capture_map, krate)); drop(moves_map); - drop(moved_variables_set); time(time_passes, "kind checking", (), |_| kind::check_crate(&ty_cx, krate)); diff --git a/src/librustc/middle/borrowck/mod.rs b/src/librustc/middle/borrowck/mod.rs index 47aa7907b5a..5504393e7c2 100644 --- a/src/librustc/middle/borrowck/mod.rs +++ b/src/librustc/middle/borrowck/mod.rs @@ -77,13 +77,11 @@ impl<'a> Visitor<()> for BorrowckCtxt<'a> { pub fn check_crate(tcx: &ty::ctxt, moves_map: &NodeSet, - moved_variables_set: &NodeSet, capture_map: &moves::CaptureMap, krate: &ast::Crate) { let mut bccx = BorrowckCtxt { tcx: tcx, moves_map: moves_map, - moved_variables_set: moved_variables_set, capture_map: capture_map, stats: @BorrowStats { loaned_paths_same: Cell::new(0), @@ -168,7 +166,6 @@ fn borrowck_fn(this: &mut BorrowckCtxt, pub struct BorrowckCtxt<'a> { tcx: &'a ty::ctxt, moves_map: &'a NodeSet, - moved_variables_set: &'a NodeSet, capture_map: &'a moves::CaptureMap, // Statistics: diff --git a/src/librustc/middle/moves.rs b/src/librustc/middle/moves.rs index 53d3dec6713..1e44e1ab7f9 100644 --- a/src/librustc/middle/moves.rs +++ b/src/librustc/middle/moves.rs @@ -101,11 +101,6 @@ borrow checker and trans, for example, only care about the outermost expressions that are moved. It is more efficient therefore just to store those entries. -Sometimes though we want to know the variables that are moved (in -particular in the borrow checker). For these cases, the set -`moved_variables_set` just collects the ids of variables that are -moved. - Finally, the `capture_map` maps from the node_id of a closure expression to an array of `CaptureVar` structs detailing which variables are captured and how (by ref, by copy, by move). @@ -170,7 +165,6 @@ pub struct MoveMaps { * pub Note: The `moves_map` stores expression ids that are moves, * whereas this set stores the ids of the variables that are * moved at some point */ - pub moved_variables_set: NodeSet, pub capture_map: CaptureMap } @@ -206,7 +200,6 @@ pub fn compute_moves(tcx: &ty::ctxt, krate: &Crate) -> MoveMaps { tcx: tcx, move_maps: MoveMaps { moves_map: NodeSet::new(), - moved_variables_set: NodeSet::new(), capture_map: NodeMap::new() } }; @@ -326,19 +319,6 @@ impl<'a> VisitContext<'a> { debug!("comp_mode = {:?}", comp_mode); match expr.node { - ExprPath(..) => { - match comp_mode { - Move => { - let def = self.tcx.def_map.borrow().get_copy(&expr.id); - let r = moved_variable_node_id_from_def(def); - for &id in r.iter() { - self.move_maps.moved_variables_set.insert(id); - } - } - Read => {} - } - } - ExprUnary(UnDeref, base) => { // *base if !self.use_overloaded_operator(expr, base, []) { // Moving out of *base moves out of base. @@ -475,6 +455,7 @@ impl<'a> VisitContext<'a> { self.use_expr(base, Read); } + ExprPath(..) | ExprInlineAsm(..) | ExprBreak(..) | ExprAgain(..) | diff --git a/src/test/run-pass/borrowck-preserve-box-in-field.rs b/src/test/compile-fail/borrowck-preserve-box-in-field.rs similarity index 87% rename from src/test/run-pass/borrowck-preserve-box-in-field.rs rename to src/test/compile-fail/borrowck-preserve-box-in-field.rs index f05b8c67d77..ff138451e93 100644 --- a/src/test/run-pass/borrowck-preserve-box-in-field.rs +++ b/src/test/compile-fail/borrowck-preserve-box-in-field.rs @@ -26,8 +26,10 @@ struct F { f: ~int } pub fn main() { let mut x = @F {f: ~3}; borrow(x.f, |b_x| { + //~^ ERROR cannot borrow `x` as mutable because `*x.f` is also borrowed as immutable assert_eq!(*b_x, 3); assert_eq!(&(*x.f) as *int, &(*b_x) as *int); + //~^ NOTE borrow occurs due to use of `x` in closure x = @F {f: ~4}; println!("&*b_x = {:p}", &(*b_x)); diff --git a/src/test/run-pass/borrowck-preserve-box-in-uniq.rs b/src/test/compile-fail/borrowck-preserve-box-in-uniq.rs similarity index 86% rename from src/test/run-pass/borrowck-preserve-box-in-uniq.rs rename to src/test/compile-fail/borrowck-preserve-box-in-uniq.rs index 0896d4de625..b06eb0d6ba2 100644 --- a/src/test/run-pass/borrowck-preserve-box-in-uniq.rs +++ b/src/test/compile-fail/borrowck-preserve-box-in-uniq.rs @@ -26,8 +26,10 @@ struct F { f: ~int } pub fn main() { let mut x = ~@F{f: ~3}; borrow(x.f, |b_x| { + //~^ ERROR cannot borrow `x` as mutable because `*x.f` is also borrowed as immutable assert_eq!(*b_x, 3); assert_eq!(&(*x.f) as *int, &(*b_x) as *int); + //~^ NOTE borrow occurs due to use of `x` in closure *x = @F{f: ~4}; println!("&*b_x = {:p}", &(*b_x)); diff --git a/src/test/run-pass/borrowck-preserve-box.rs b/src/test/compile-fail/borrowck-preserve-box.rs similarity index 86% rename from src/test/run-pass/borrowck-preserve-box.rs rename to src/test/compile-fail/borrowck-preserve-box.rs index cfb9a4b91df..1a920c7871e 100644 --- a/src/test/run-pass/borrowck-preserve-box.rs +++ b/src/test/compile-fail/borrowck-preserve-box.rs @@ -24,8 +24,10 @@ fn borrow(x: &int, f: |x: &int|) { pub fn main() { let mut x = @3; borrow(x, |b_x| { + //~^ ERROR cannot borrow `x` as mutable because `*x` is also borrowed as immutable assert_eq!(*b_x, 3); assert_eq!(&(*x) as *int, &(*b_x) as *int); + //~^ NOTE borrow occurs due to use of `x` in closure x = @22; println!("&*b_x = {:p}", &(*b_x)); diff --git a/src/test/run-pass/borrowck-preserve-cond-box.rs b/src/test/compile-fail/borrowck-preserve-cond-box.rs similarity index 88% rename from src/test/run-pass/borrowck-preserve-cond-box.rs rename to src/test/compile-fail/borrowck-preserve-cond-box.rs index 52ea474dbf5..7000e2351dd 100644 --- a/src/test/run-pass/borrowck-preserve-cond-box.rs +++ b/src/test/compile-fail/borrowck-preserve-cond-box.rs @@ -30,8 +30,8 @@ fn testfn(cond: bool) { println!("*r = {}, exp = {}", *r, exp); assert_eq!(*r, exp); - x = @5; - y = @6; + x = @5; //~ERROR cannot assign to `x` because it is borrowed + y = @6; //~ERROR cannot assign to `y` because it is borrowed println!("*r = {}, exp = {}", *r, exp); assert_eq!(*r, exp); diff --git a/src/test/run-pass/borrowck-preserve-expl-deref.rs b/src/test/compile-fail/borrowck-preserve-expl-deref.rs similarity index 87% rename from src/test/run-pass/borrowck-preserve-expl-deref.rs rename to src/test/compile-fail/borrowck-preserve-expl-deref.rs index 749c8063950..aeabf6d9f8b 100644 --- a/src/test/run-pass/borrowck-preserve-expl-deref.rs +++ b/src/test/compile-fail/borrowck-preserve-expl-deref.rs @@ -26,8 +26,10 @@ struct F { f: ~int } pub fn main() { let mut x = @F {f: ~3}; borrow((*x).f, |b_x| { + //~^ ERROR cannot borrow `x` as mutable because `*x.f` is also borrowed as immutable assert_eq!(*b_x, 3); assert_eq!(&(*x.f) as *int, &(*b_x) as *int); + //~^ NOTE borrow occurs due to use of `x` in closure x = @F {f: ~4}; println!("&*b_x = {:p}", &(*b_x)); diff --git a/src/test/run-pass/regions-appearance-constraint.rs b/src/test/compile-fail/regions-appearance-constraint.rs similarity index 78% rename from src/test/run-pass/regions-appearance-constraint.rs rename to src/test/compile-fail/regions-appearance-constraint.rs index a65a878b3c7..68bbebb8cb0 100644 --- a/src/test/run-pass/regions-appearance-constraint.rs +++ b/src/test/compile-fail/regions-appearance-constraint.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -/* Tests conditional rooting of the box y */ +// Test no-special rooting is used for managed boxes #![feature(managed_boxes)] @@ -25,12 +25,11 @@ fn testfn(cond: bool) { exp = 4; } - x = @5; - y = @6; + x = @5; //~ERROR cannot assign to `x` because it is borrowed + y = @6; //~ERROR cannot assign to `y` because it is borrowed assert_eq!(*a, exp); assert_eq!(x, @5); assert_eq!(y, @6); } -pub fn main() { -} +pub fn main() {}