]> git.lizzy.rs Git - rust.git/blob - tests/ui/closures/2229_closure_analysis/simple-struct-min-capture.rs
Auto merge of #107843 - bjorn3:sync_cg_clif-2023-02-09, r=bjorn3
[rust.git] / tests / ui / closures / 2229_closure_analysis / simple-struct-min-capture.rs
1 // edition:2021
2
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
31         //~| NOTE: p[] captured as MutBorrow here
32         println!("{:?}", p);
33         //~^ NOTE: Capturing p[] -> ImmBorrow
34         //~| NOTE: Min Capture p[] -> MutBorrow
35         //~| NOTE: p[] used here
36     };
37
38     c();
39 }