]> git.lizzy.rs Git - rust.git/commit
auto merge of #16460 : pcwalton/rust/borrowck-closure-issue, r=nikomatsakis
authorbors <bors@rust-lang.org>
Wed, 13 Aug 2014 04:11:22 +0000 (04:11 +0000)
committerbors <bors@rust-lang.org>
Wed, 13 Aug 2014 04:11:22 +0000 (04:11 +0000)
commit6291781592ff079fc1e84f4b8be5684d2a52b8bd
tree4aaf32a3a7f2782a8d95513d3fcea0368518ab4e
parentee87234eed95d6077247bee5416339ce2652b599
parentf1799fdfcae806988bd7104870da56c7596af8ac
auto merge of #16460 : pcwalton/rust/borrowck-closure-issue, r=nikomatsakis

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