| // This test is taken directly from #16053. |
| // It checks that you cannot use an AND-pattern (`binding @ pat`) |
| // where one side is by-ref and the other is by-move. |
| |
| struct X { |
| x: (), |
| } |
| |
| fn main() { |
| let x = Some(X { x: () }); |
| match x { |
| Some(ref _y @ _z) => {} //~ ERROR cannot move out of value because it is borrowed |
| //~| ERROR borrow of moved value |
| None => panic!(), |
| } |
| |
| let x = Some(X { x: () }); |
| match x { |
| Some(_z @ ref _y) => {} |
| //~^ ERROR borrow of moved value |
| None => panic!(), |
| } |
| |
| let mut x = Some(X { x: () }); |
| match x { |
| Some(ref mut _y @ _z) => {} //~ ERROR cannot move out of value because it is borrowed |
| //~| ERROR borrow of moved value |
| None => panic!(), |
| } |
| |
| let mut x = Some(X { x: () }); |
| match x { |
| Some(_z @ ref mut _y) => {} |
| //~^ ERROR borrow of moved value |
| None => panic!(), |
| } |
| } |