| #![feature(box_patterns)] | |
| fn a() { | |
| let mut vec = [Box::new(1), Box::new(2), Box::new(3)]; | |
| match vec { | |
| [box ref _a, _, _] => { | |
| //~^ NOTE `vec[_]` is borrowed here | |
| vec[0] = Box::new(4); //~ ERROR cannot assign | |
| //~^ NOTE `vec[_]` is assigned to here | |
| _a.use_ref(); | |
| //~^ NOTE borrow later used here | |
| } | |
| } | |
| } | |
| fn b() { | |
| let mut vec = vec![Box::new(1), Box::new(2), Box::new(3)]; | |
| let vec: &mut [Box<isize>] = &mut vec; | |
| match vec { | |
| &mut [ref _b @ ..] => { | |
| //~^ NOTE `vec[_]` is borrowed here | |
| vec[0] = Box::new(4); //~ ERROR cannot assign | |
| //~^ NOTE `vec[_]` is assigned to here | |
| _b.use_ref(); | |
| //~^ NOTE borrow later used here | |
| } | |
| } | |
| } | |
| fn c() { | |
| let mut vec = vec![Box::new(1), Box::new(2), Box::new(3)]; | |
| let vec: &mut [Box<isize>] = &mut vec; | |
| match vec { | |
| //~^ ERROR cannot move out | |
| //~| NOTE cannot move out | |
| &mut [_a, | |
| //~^ NOTE data moved here because `_a` has type | |
| //~| HELP consider removing the mutable borrow | |
| .. | |
| ] => { | |
| } | |
| _ => {} | |
| } | |
| let a = vec[0]; //~ ERROR cannot move out | |
| //~| NOTE cannot move out of here | |
| //~| NOTE move occurs because | |
| //~| HELP consider borrowing here | |
| //~| HELP consider cloning | |
| } | |
| fn d() { | |
| let mut vec = vec![Box::new(1), Box::new(2), Box::new(3)]; | |
| let vec: &mut [Box<isize>] = &mut vec; | |
| match vec { | |
| //~^ ERROR cannot move out | |
| //~| NOTE cannot move out | |
| &mut [ | |
| //~^ HELP consider removing the mutable borrow | |
| _b] => {} | |
| //~^ NOTE data moved here because `_b` has type | |
| _ => {} | |
| } | |
| let a = vec[0]; //~ ERROR cannot move out | |
| //~| NOTE cannot move out of here | |
| //~| NOTE move occurs because | |
| //~| HELP consider borrowing here | |
| //~| HELP consider cloning | |
| } | |
| fn e() { | |
| let mut vec = vec![Box::new(1), Box::new(2), Box::new(3)]; | |
| let vec: &mut [Box<isize>] = &mut vec; | |
| match vec { | |
| //~^ ERROR cannot move out | |
| //~| NOTE cannot move out | |
| //~| NOTE move occurs because these variables have types | |
| &mut [_a, _b, _c] => {} | |
| //~^ NOTE data moved here | |
| //~| NOTE and here | |
| //~| NOTE and here | |
| //~| HELP consider removing the mutable borrow | |
| _ => {} | |
| } | |
| let a = vec[0]; //~ ERROR cannot move out | |
| //~| NOTE cannot move out of here | |
| //~| NOTE move occurs because | |
| //~| HELP consider borrowing here | |
| //~| HELP consider cloning | |
| } | |
| fn main() {} | |
| trait Fake { fn use_mut(&mut self) { } fn use_ref(&self) { } } | |
| impl<T> Fake for T { } |