rust-lang/rust — pull request #16460 by pcwalton (2014-08-12 21:30:22+00:00)
Title: librustc: Record unique immutable borrows in the restrictions table.

This fixes borrow checking for closures. Code like this will break:

struct Foo {
x: int,
}

pub fn main() {
let mut this = &mut Foo {
x: 1,
};
let r = || {
let p = &this.x;
&mut this.x;
};
r()
}

Change this code to not take multiple mutable references to the same value. For
example:

struct Foo {
x: int,
}

pub fn main() {
let mut this = &mut Foo {
x: 1,
};
let r = || {
&mut this.x;
};
r()
}

Closes #16361.

[breaking-change]

r? @nikomatsakis