]> git.proxmox.com Git - rustc.git/blame - src/test/ui/closures/2229_closure_analysis/by_value.rs
New upstream version 1.66.0+dfsg1
[rustc.git] / src / test / ui / closures / 2229_closure_analysis / by_value.rs
CommitLineData
136023e0
XL
1// edition:2021
2
5869c6ff
XL
3// Test that we handle derferences properly when only some of the captures are being moved with
4// `capture_disjoint_fields` enabled.
5869c6ff
XL
5#![feature(rustc_attrs)]
6
7#[derive(Debug, Default)]
8struct SomeLargeType;
9struct MuchLargerType([SomeLargeType; 32]);
10
11// Ensure that we don't capture any derefs when moving captures into the closures,
12// i.e. only data from the enclosing stack is moved.
13fn big_box() {
14 let s = MuchLargerType(Default::default());
15 let b = Box::new(s);
16 let t = (b, 10);
17
18 let c = #[rustc_capture_analysis]
19 //~^ ERROR: attributes on expressions are experimental
20 //~| NOTE: see issue #15701 <https://github.com/rust-lang/rust/issues/15701>
21 || {
22 //~^ First Pass analysis includes:
23 //~| Min Capture analysis includes:
24 let p = t.0.0;
136023e0 25 //~^ NOTE: Capturing t[(0, 0),Deref,(0, 0)] -> ByValue
5869c6ff
XL
26 //~| NOTE: Min Capture t[(0, 0)] -> ByValue
27 println!("{} {:?}", t.1, p);
28 //~^ NOTE: Capturing t[(1, 0)] -> ImmBorrow
29 //~| NOTE: Min Capture t[(1, 0)] -> ImmBorrow
30 };
31
32 c();
33}
34
35fn main() {
36 big_box();
37}