Skip to content

Commit

Permalink
compile-fail: Beef up borrowck test to include some scenarios where w…
Browse files Browse the repository at this point in the history
…e borrow mutably twice in a row
  • Loading branch information
nikomatsakis authored and eddyb committed Mar 13, 2014
1 parent 27c6244 commit a7db0d5
Showing 1 changed file with 21 additions and 1 deletion.
Expand Up @@ -77,6 +77,21 @@ fn deref_extend_mut_field2<'a>(x: &'a mut Own<Point>) -> &'a mut int {
&mut x.y
}

fn deref_extend_mut_field3<'a>(x: &'a mut Own<Point>) {
// Hmm, this is unfortunate, because with ~ it would work,
// but it's presently the expected outcome. See `deref_extend_mut_field4`
// for the workaround.

let _x = &mut x.x;
let _y = &mut x.y; //~ ERROR cannot borrow
}

fn deref_extend_mut_field4<'a>(x: &'a mut Own<Point>) {
let p = &mut **x;
let _x = &mut p.x;
let _y = &mut p.y;
}

fn assign_field1<'a>(x: Own<Point>) {
x.y = 3; //~ ERROR cannot borrow
}
Expand All @@ -89,6 +104,11 @@ fn assign_field3<'a>(x: &'a mut Own<Point>) {
x.y = 3;
}

fn assign_field4<'a>(x: &'a mut Own<Point>) {
let _p: &mut Point = &mut **x;
x.y = 3; //~ ERROR cannot borrow
}

// FIXME(eddyb) #12825 This shouldn't attempt to call deref_mut.
/*
fn deref_imm_method(x: Own<Point>) {
Expand Down Expand Up @@ -128,4 +148,4 @@ fn assign_method3<'a>(x: &'a mut Own<Point>) {
*x.y_mut() = 3;
}

pub fn main() {}
pub fn main() {}

0 comments on commit a7db0d5

Please sign in to comment.