diff options
| author | dianne <diannes.gm@gmail.com> | 2025-03-13 22:34:26 -0700 |
|---|---|---|
| committer | dianne <diannes.gm@gmail.com> | 2025-04-16 15:42:12 -0700 |
| commit | ff0d4bc743086111c841812ec9925efb075d1243 (patch) | |
| tree | 3ed45163c0601ff83abd8a9544089e36efa4c736 /tests/ui/pattern | |
| parent | 977c9ab7a2ead006e06b1b78cc1b6ac63245560b (diff) | |
| download | rust-ff0d4bc743086111c841812ec9925efb075d1243.tar.gz rust-ff0d4bc743086111c841812ec9925efb075d1243.zip | |
upvar inference for implicit deref patterns
Diffstat (limited to 'tests/ui/pattern')
| -rw-r--r-- | tests/ui/pattern/deref-patterns/closure_capture.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/ui/pattern/deref-patterns/closure_capture.rs b/tests/ui/pattern/deref-patterns/closure_capture.rs index fc0ddedac2b..08586b6c7ab 100644 --- a/tests/ui/pattern/deref-patterns/closure_capture.rs +++ b/tests/ui/pattern/deref-patterns/closure_capture.rs @@ -11,6 +11,15 @@ fn main() { assert_eq!(b.len(), 3); f(); + let v = vec![1, 2, 3]; + let f = || { + // this should count as a borrow of `v` as a whole + let [.., x] = v else { unreachable!() }; + assert_eq!(x, 3); + }; + assert_eq!(v, [1, 2, 3]); + f(); + let mut b = Box::new("aaa".to_string()); let mut f = || { let deref!(ref mut s) = b else { unreachable!() }; @@ -18,4 +27,22 @@ fn main() { }; f(); assert_eq!(b.len(), 5); + + let mut v = vec![1, 2, 3]; + let mut f = || { + // this should count as a mutable borrow of `v` as a whole + let [.., ref mut x] = v else { unreachable!() }; + *x = 4; + }; + f(); + assert_eq!(v, [1, 2, 4]); + + let mut v = vec![1, 2, 3]; + let mut f = || { + // here, `[.., x]` is adjusted by both an overloaded deref and a builtin deref + let [.., x] = &mut v else { unreachable!() }; + *x = 4; + }; + f(); + assert_eq!(v, [1, 2, 4]); } |
