]>
Commit | Line | Data |
---|---|---|
136023e0 | 1 | // edition:2021 |
fc512014 | 2 | |
fc512014 XL |
3 | #![feature(rustc_attrs)] |
4 | ||
5 | // Test to ensure that min analysis meets capture kind for all paths captured. | |
6 | ||
7 | #[derive(Debug)] | |
8 | struct Point { | |
9 | x: i32, | |
10 | y: i32, | |
11 | } | |
12 | ||
13 | fn main() { | |
14 | let mut p = Point { x: 10, y: 20 }; | |
15 | ||
16 | // | |
17 | // Requirements: | |
18 | // p.x -> MutBoorrow | |
19 | // p -> ImmBorrow | |
20 | // | |
21 | // Requirements met when p is captured via MutBorrow | |
22 | // | |
23 | let mut c = #[rustc_capture_analysis] | |
24 | //~^ ERROR: attributes on expressions are experimental | |
25 | //~| NOTE: see issue #15701 <https://github.com/rust-lang/rust/issues/15701> | |
26 | || { | |
27 | //~^ ERROR: First Pass analysis includes: | |
28 | //~| ERROR: Min Capture analysis includes: | |
29 | p.x += 10; | |
30 | //~^ NOTE: Capturing p[(0, 0)] -> MutBorrow | |
5869c6ff | 31 | //~| NOTE: p[] captured as MutBorrow here |
fc512014 XL |
32 | println!("{:?}", p); |
33 | //~^ NOTE: Capturing p[] -> ImmBorrow | |
5869c6ff XL |
34 | //~| NOTE: Min Capture p[] -> MutBorrow |
35 | //~| NOTE: p[] used here | |
fc512014 XL |
36 | }; |
37 | ||
38 | c(); | |
39 | } |