]> git.lizzy.rs Git - rust.git/blob - tests/ui/closures/2229_closure_analysis/capture-enums.rs
Move /src/test to /tests
[rust.git] / tests / ui / closures / 2229_closure_analysis / capture-enums.rs
1 // edition:2021
2
3 #![feature(rustc_attrs)]
4
5 enum Info {
6     Point(i32, i32, String),
7     Meta(String, Vec<(i32, i32)>)
8 }
9
10 fn multi_variant_enum() {
11     let point = Info::Point(10, -10, "1".into());
12
13     let vec = Vec::new();
14     let meta = Info::Meta("meta".into(), vec);
15
16     let c = #[rustc_capture_analysis]
17     //~^ ERROR: attributes on expressions are experimental
18     //~| NOTE: see issue #15701 <https://github.com/rust-lang/rust/issues/15701>
19     || {
20     //~^ First Pass analysis includes:
21     //~| Min Capture analysis includes:
22         if let Info::Point(_, _, str) = point {
23             //~^ NOTE: Capturing point[] -> ImmBorrow
24             //~| NOTE: Capturing point[(2, 0)] -> ByValue
25             //~| NOTE: Min Capture point[] -> ByValue
26             println!("{}", str);
27         }
28
29         if let Info::Meta(_, v) = meta {
30             //~^ NOTE: Capturing meta[] -> ImmBorrow
31             //~| NOTE: Capturing meta[(1, 1)] -> ByValue
32             //~| NOTE: Min Capture meta[] -> ByValue
33             println!("{:?}", v);
34         }
35     };
36
37     c();
38 }
39
40 enum SingleVariant {
41     Point(i32, i32, String),
42 }
43
44 fn single_variant_enum() {
45     let point = SingleVariant::Point(10, -10, "1".into());
46
47     let c = #[rustc_capture_analysis]
48     //~^ ERROR: attributes on expressions are experimental
49     //~| NOTE: see issue #15701 <https://github.com/rust-lang/rust/issues/15701>
50     || {
51     //~^ First Pass analysis includes:
52     //~| Min Capture analysis includes:
53         let SingleVariant::Point(_, _, str) = point;
54         //~^ NOTE: Capturing point[(2, 0)] -> ByValue
55         //~| NOTE: Min Capture point[(2, 0)] -> ByValue
56         println!("{}", str);
57     };
58
59     c();
60 }
61
62 fn main() {}