]>
Commit | Line | Data |
---|---|---|
136023e0 | 1 | // edition:2021 |
fc512014 | 2 | |
fc512014 XL |
3 | #![feature(rustc_attrs)] |
4 | ||
5 | struct Filter { | |
6 | div: i32, | |
7 | } | |
8 | impl Filter { | |
9 | fn allowed(&self, x: i32) -> bool { | |
10 | x % self.div == 1 | |
11 | } | |
12 | } | |
13 | ||
14 | struct Data { | |
15 | filter: Filter, | |
16 | list: Vec<i32>, | |
17 | } | |
18 | impl Data { | |
19 | fn update(&mut self) { | |
20 | // The closure passed to filter only captures self.filter, | |
21 | // therefore mutating self.list is allowed. | |
22 | self.list.retain( | |
23 | #[rustc_capture_analysis] | |
24 | |v| self.filter.allowed(*v), | |
25 | //~^ ERROR: First Pass analysis includes: | |
26 | //~| ERROR: Min Capture analysis includes: | |
27 | //~| NOTE: Capturing self[Deref,(0, 0)] -> ImmBorrow | |
28 | //~| NOTE: Min Capture self[Deref,(0, 0)] -> ImmBorrow | |
29 | ); | |
30 | } | |
31 | } | |
32 | ||
33 | fn main() { | |
34 | let mut d = Data { filter: Filter { div: 3 }, list: Vec::new() }; | |
35 | ||
36 | for i in 1..10 { | |
37 | d.list.push(i); | |
38 | } | |
39 | ||
40 | d.update(); | |
41 | } |