From cd35e251ea086e8637562323acfe65216b2c8051 Mon Sep 17 00:00:00 2001 From: Roxane Date: Mon, 23 Aug 2021 22:41:19 -0400 Subject: [PATCH] Add additional match test case --- .../2229_closure_analysis/match-edge-cases.rs | 34 +++++++++++++++++++ .../match-edge-cases.stderr | 17 ++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/test/ui/closures/2229_closure_analysis/match-edge-cases.stderr diff --git a/src/test/ui/closures/2229_closure_analysis/match-edge-cases.rs b/src/test/ui/closures/2229_closure_analysis/match-edge-cases.rs index 914ebbe26a5..f5330b07445 100644 --- a/src/test/ui/closures/2229_closure_analysis/match-edge-cases.rs +++ b/src/test/ui/closures/2229_closure_analysis/match-edge-cases.rs @@ -41,4 +41,38 @@ pub fn edge_case_char(event: char) { }; } +enum SingleVariant { + A +} + +struct TestStruct { + x: i32, + y: i32, + z: i32, +} + +fn edge_case_if() { + let sv = SingleVariant::A; + let condition = true; + // sv should not be captured as it is a SingleVariant + let _a = || { + match sv { + SingleVariant::A if condition => (), + _ => () + } + }; + let mut mut_sv = sv; + _a(); + + // ts should be captured + let ts = TestStruct { x: 1, y: 1, z: 1 }; + let _b = || { match ts { + TestStruct{ x: 1, .. } => (), + _ => () + }}; + let mut mut_ts = ts; + //~^ ERROR: cannot move out of `ts` because it is borrowed + _b(); +} + fn main() {} diff --git a/src/test/ui/closures/2229_closure_analysis/match-edge-cases.stderr b/src/test/ui/closures/2229_closure_analysis/match-edge-cases.stderr new file mode 100644 index 00000000000..b9d2316206e --- /dev/null +++ b/src/test/ui/closures/2229_closure_analysis/match-edge-cases.stderr @@ -0,0 +1,17 @@ +error[E0505]: cannot move out of `ts` because it is borrowed + --> $DIR/match-edge-cases.rs:32:22 + | +LL | let _b = || { match ts { + | -- -- borrow occurs due to use in closure + | | + | borrow of `ts` occurs here +... +LL | let mut mut_ts = ts; + | ^^ move out of `ts` occurs here +LL | +LL | _b(); + | -- borrow later used here + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0505`. -- 2.44.0