]> git.lizzy.rs Git - rust.git/blob - tests/ui/closures/2229_closure_analysis/preserve_field_drop_order2.rs
Auto merge of #103019 - Kobzol:ci-multistage-python, r=Mark-Simulacrum
[rust.git] / tests / ui / closures / 2229_closure_analysis / preserve_field_drop_order2.rs
1 // run-pass
2 // check-run-results
3 // revisions: twenty_eighteen twenty_twentyone
4 // [twenty_eighteen]compile-flags: --edition 2018
5 // [twenty_twentyone]compile-flags: --edition 2021
6
7 #[derive(Debug)]
8 struct Dropable(&'static str);
9
10 impl Drop for Dropable {
11     fn drop(&mut self) {
12         println!("Dropping {}", self.0)
13     }
14 }
15
16 #[derive(Debug)]
17 struct A {
18     x: Dropable,
19     y: Dropable,
20 }
21
22 #[derive(Debug)]
23 struct B {
24     c: A,
25     d: A,
26 }
27
28 #[derive(Debug)]
29 struct R<'a> {
30     c: &'a A,
31     d: &'a A,
32 }
33
34 fn main() {
35     let a = A { x: Dropable("x"), y: Dropable("y") };
36
37     let c = move || println!("{:?} {:?}", a.y, a.x);
38
39     c();
40
41     let b = B {
42         c: A { x: Dropable("b.c.x"), y: Dropable("b.c.y") },
43         d: A { x: Dropable("b.d.x"), y: Dropable("b.d.y") },
44     };
45
46     let d = move || println!("{:?} {:?} {:?} {:?}", b.d.y, b.d.x, b.c.y, b.c.x);
47
48     d();
49
50         let r = R {
51         c: &A { x: Dropable("r.c.x"), y: Dropable("r.c.y") },
52         d: &A { x: Dropable("r.d.x"), y: Dropable("r.d.y") },
53     };
54
55     let e = move || println!("{:?} {:?} {:?} {:?}", r.d.y, r.d.x, r.c.y, r.c.x);
56
57     e();
58 }