about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRoxane <roxane.fruytier@hotmail.com>2021-08-23 22:41:19 -0400
committerRoxane <roxane.fruytier@hotmail.com>2021-08-28 19:29:46 -0400
commitcd35e251ea086e8637562323acfe65216b2c8051 (patch)
treecf203085b8a8d3346836be2bc5f920042116a069
parent20de556a26dd1fb10a3cbaf9bc02c27015edb406 (diff)
downloadrust-cd35e251ea086e8637562323acfe65216b2c8051.tar.gz
rust-cd35e251ea086e8637562323acfe65216b2c8051.zip
Add additional match test case
-rw-r--r--src/test/ui/closures/2229_closure_analysis/match-edge-cases.rs34
-rw-r--r--src/test/ui/closures/2229_closure_analysis/match-edge-cases.stderr17
2 files changed, 51 insertions, 0 deletions
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`.