1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
#![feature(if_let_guard)]
#![feature(let_chains)]
#![allow(irrefutable_let_patterns)]
fn same_pattern(c: bool) {
let x: Box<_> = Box::new(1);
let v = (1, 2);
match v {
(1, 2) if let y = x && c => (),
(1, 2) if let z = x => (), //~ ERROR use of moved value: `x`
_ => (),
}
}
fn same_pattern_ok(c: bool) {
let x: Box<_> = Box::new(1);
let v = (1, 2);
match v {
(1, 2) if c && let y = x => (),
(1, 2) if let z = x => (),
_ => (),
}
}
fn different_patterns(c: bool) {
let x: Box<_> = Box::new(1);
let v = (1, 2);
match v {
(1, _) if let y = x && c => (),
(_, 2) if let z = x => (), //~ ERROR use of moved value: `x`
_ => (),
}
}
fn different_patterns_ok(c: bool) {
let x: Box<_> = Box::new(1);
let v = (1, 2);
match v {
(1, _) if c && let y = x => (),
(_, 2) if let z = x => (),
_ => (),
}
}
fn or_pattern(c: bool) {
let x: Box<_> = Box::new(1);
let v = (1, 2);
match v {
(1, _) | (_, 2) if let y = x && c => (), //~ ERROR use of moved value: `x`
_ => (),
}
}
fn or_pattern_ok(c: bool) {
let x: Box<_> = Box::new(1);
let v = (1, 2);
match v {
(1, _) | (_, 2) if c && let y = x => (),
_ => (),
}
}
fn use_in_arm(c: bool) {
let x: Box<_> = Box::new(1);
let v = (1, 2);
match v {
(1, 2) if let y = x && c => false,
_ => { *x == 1 }, //~ ERROR use of moved value: `x`
};
}
fn use_in_arm_ok(c: bool) {
let x: Box<_> = Box::new(1);
let v = (1, 2);
match v {
(1, 2) if c && let y = x => false,
_ => { *x == 1 },
};
}
fn use_in_same_chain(c: bool) {
let x: Box<_> = Box::new(1);
let v = (1, 2);
match v {
(1, 2) if let y = x && c && let z = x => false, //~ ERROR use of moved value: `x`
_ => true,
};
}
fn main() {}
|