]> git.proxmox.com Git - rustc.git/blame - src/test/ui/closures/2229_closure_analysis/filter-on-struct-member.rs
New upstream version 1.55.0+dfsg1
[rustc.git] / src / test / ui / closures / 2229_closure_analysis / filter-on-struct-member.rs
CommitLineData
136023e0 1// edition:2021
fc512014 2
fc512014
XL
3#![feature(rustc_attrs)]
4
5struct Filter {
6 div: i32,
7}
8impl Filter {
9 fn allowed(&self, x: i32) -> bool {
10 x % self.div == 1
11 }
12}
13
14struct Data {
15 filter: Filter,
16 list: Vec<i32>,
17}
18impl 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
33fn 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}