]> git.lizzy.rs Git - rust.git/blob - tests/ui/closures/2229_closure_analysis/filter-on-struct-member.rs
Rollup merge of #106670 - albertlarsan68:check-docs-in-pr-ci, r=Mark-Simulacrum
[rust.git] / tests / ui / closures / 2229_closure_analysis / filter-on-struct-member.rs
1 // edition:2021
2
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 }