diff options
Diffstat (limited to '')
-rw-r--r-- | src/test/ui/nll/issue-27282-move-match-input-into-guard.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/test/ui/nll/issue-27282-move-match-input-into-guard.rs b/src/test/ui/nll/issue-27282-move-match-input-into-guard.rs new file mode 100644 index 000000000..4109c10e2 --- /dev/null +++ b/src/test/ui/nll/issue-27282-move-match-input-into-guard.rs @@ -0,0 +1,20 @@ +// Issue 27282: Example 2: This sidesteps the AST checks disallowing +// mutable borrows in match guards by hiding the mutable borrow in a +// guard behind a move (of the mutably borrowed match input) within a +// closure. +// +// This example is not rejected by AST borrowck (and then reliably +// reaches the panic code when executed, despite the compiler warning +// about that match arm being unreachable. + +fn main() { + let b = &mut true; + match b { + //~^ ERROR use of moved value: `b` [E0382] + &mut false => {}, + _ if { (|| { let bar = b; *bar = false; })(); + false } => { }, + &mut true => { println!("You might think we should get here"); }, + _ => panic!("surely we could never get here, since rustc warns it is unreachable."), + } +} |