summary refs log tree commit diff
path: root/src/test/ui/mut/mut-pattern-internal-mutability.rs
blob: ffad623e572a76fcaa8b27195dffa1522c79707e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// revisions: ast mir
//[mir]compile-flags: -Z borrowck=mir

fn main() {
    let foo = &mut 1;

    let &mut x = foo;
    x += 1; //[ast]~ ERROR cannot assign twice to immutable variable
            //[mir]~^ ERROR cannot assign twice to immutable variable `x`

    // explicitly mut-ify internals
    let &mut mut x = foo;
    x += 1;

    // check borrowing is detected successfully
    let &mut ref x = foo;
    *foo += 1; //[ast]~ ERROR cannot assign to `*foo` because it is borrowed
    //[mir]~^ ERROR cannot assign to `*foo` because it is borrowed
    drop(x);
}