// Check that borrowck knows that moves in the pattern for if-let guards // only happen when the pattern is matched. // build-pass #![feature(if_let_guard)] #![allow(irrefutable_let_patterns)] fn same_pattern() { let x: Box<_> = Box::new(1); let v = (1, 2); match v { (1, 2) if let y = x => (), (1, 2) if let z = x => (), _ => (), } } fn or_pattern() { let x: Box<_> = Box::new(1); let v = (1, 2); match v { (1, _) | (_, 2) if let y = x => (), _ => (), } } fn main() { let x: Box<_> = Box::new(1); let v = (1, 2); match v { (1, 2) if let y = x => false, _ => { *x == 1 }, }; }