An "or" pattern was used where the variable bindings are not consistently bound across patterns. Erroneous code example: ```compile_fail,E0409 let x = (0, 2); match x { (0, ref y) | (y, 0) => { /* use y */} // error: variable `y` is bound with // different mode in pattern #2 // than in pattern #1 _ => () } ``` Here, `y` is bound by-value in one case and by-reference in the other. To fix this error, just use the same mode in both cases. Generally using `ref` or `ref mut` where not already used will fix this: ``` let x = (0, 2); match x { (0, ref y) | (ref y, 0) => { /* use y */} _ => () } ``` Alternatively, split the pattern: ``` let x = (0, 2); match x { (y, 0) => { /* use y */ } (0, ref y) => { /* use y */} _ => () } ```