| #![feature(deref_patterns)] | |
| #[rustfmt::skip] | |
| fn main() { | |
| let mut v = vec![false]; | |
| match v { | |
| deref!([true]) => {} | |
| _ if { v[0] = true; false } => {} | |
| //~^ ERROR cannot borrow `v` as mutable because it is also borrowed as immutable | |
| deref!([false]) => {} | |
| _ => {}, | |
| } | |
| match v { | |
| [true] => {} | |
| _ if { v[0] = true; false } => {} | |
| //~^ ERROR cannot borrow `v` as mutable because it is also borrowed as immutable | |
| [false] => {} | |
| _ => {}, | |
| } | |
| // deref patterns on boxes are lowered specially; test them separately. | |
| let mut b = Box::new(false); | |
| match b { | |
| deref!(true) => {} | |
| _ if { *b = true; false } => {} | |
| //~^ ERROR cannot assign `*b` in match guard | |
| deref!(false) => {} | |
| _ => {}, | |
| } | |
| match b { | |
| true => {} | |
| _ if { *b = true; false } => {} | |
| //~^ ERROR cannot assign `*b` in match guard | |
| false => {} | |
| _ => {}, | |
| } | |
| } |