| The matched value was assigned in a match guard. | |
| Erroneous code example: | |
| ```compile_fail,E0510 | |
| let mut x = Some(0); | |
| match x { | |
| None => {} | |
| Some(_) if { x = None; false } => {} // error! | |
| Some(_) => {} | |
| } | |
| ``` | |
| When matching on a variable it cannot be mutated in the match guards, as this | |
| could cause the match to be non-exhaustive. | |
| Here executing `x = None` would modify the value being matched and require us | |
| to go "back in time" to the `None` arm. To fix it, change the value in the match | |
| arm: | |
| ``` | |
| let mut x = Some(0); | |
| match x { | |
| None => {} | |
| Some(_) => { | |
| x = None; // ok! | |
| } | |
| } | |
| ``` |