An "or" pattern was used where the variable bindings are not consistently bound across patterns. Erroneous code example: ```compile_fail,E0408 match x { Some(y) | None => { /* use y */ } // error: variable `y` from pattern #1 is // not bound in pattern #2 _ => () } ``` Here, `y` is bound to the contents of the `Some` and can be used within the block corresponding to the match arm. However, in case `x` is `None`, we have not specified what `y` is, and the block will use a nonexistent variable. To fix this error, either split into multiple match arms: ``` let x = Some(1); match x { Some(y) => { /* use y */ } None => { /* ... */ } } ``` or, bind the variable to a field of the same type in all sub-patterns of the or pattern: ``` let x = (0, 2); match x { (0, y) | (y, 0) => { /* use y */} _ => {} } ``` In this example, if `x` matches the pattern `(0, _)`, the second field is set to `y`. If it matches `(_, 0)`, the first field is set to `y`; so in all cases `y` is set to some value.