about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTomasz Miąsko <tomasz.miasko@gmail.com>2023-04-30 00:00:00 +0000
committerTomasz Miąsko <tomasz.miasko@gmail.com>2023-04-30 20:24:10 +0200
commitb855308521a4d3c508a722e970c4de1829651232 (patch)
tree8a694916820df1ef20d2aca47e8dfd505aab2586
parent831c9298c8e6542e3ab395216e98aec21f60b470 (diff)
downloadrust-b855308521a4d3c508a722e970c4de1829651232.tar.gz
rust-b855308521a4d3c508a722e970c4de1829651232.zip
Test precise capture with a multi-variant enum and exhaustive patterns
Add test checking that it is possible to capture fields of a
multi-variant enum, when remaining variants are visibly uninhabited
(under the `exhaustive_patterns` feature gate).
-rw-r--r--tests/ui/closures/2229_closure_analysis/run_pass/multivariant.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/tests/ui/closures/2229_closure_analysis/run_pass/multivariant.rs b/tests/ui/closures/2229_closure_analysis/run_pass/multivariant.rs
new file mode 100644
index 00000000000..72652ef6034
--- /dev/null
+++ b/tests/ui/closures/2229_closure_analysis/run_pass/multivariant.rs
@@ -0,0 +1,21 @@
+// Test precise capture of a multi-variant enum (when remaining variants are
+// visibly uninhabited).
+// edition:2021
+// run-pass
+#![feature(exhaustive_patterns)]
+#![feature(never_type)]
+
+pub fn main() {
+    let mut r = Result::<!, (u32, u32)>::Err((0, 0));
+    let mut f = || {
+        let Err((ref mut a, _)) = r;
+        *a = 1;
+    };
+    let mut g = || {
+        let Err((_, ref mut b)) = r;
+        *b = 2;
+    };
+    f();
+    g();
+    assert_eq!(r, Err((1, 2)));
+}