blob: 4fc2e6c903a9364fac25f1e688b34e878d486dcf [file] [log] [blame]
//@ run-pass
//@ check-run-results
//@ revisions: twenty_eighteen twenty_twentyone
//@ [twenty_eighteen]compile-flags: --edition 2018
//@ [twenty_twentyone]compile-flags: --edition 2021
#[derive(Debug)]
struct Dropable(&'static str);
impl Drop for Dropable {
fn drop(&mut self) {
println!("Dropping {}", self.0)
}
}
#[derive(Debug)]
struct A {
x: Dropable,
y: Dropable,
}
#[derive(Debug)]
struct B {
c: A,
d: A,
}
#[derive(Debug)]
struct R<'a> {
c: &'a A,
d: &'a A,
}
fn main() {
let a = A { x: Dropable("x"), y: Dropable("y") };
let c = move || println!("{:?} {:?}", a.y, a.x);
c();
let b = B {
c: A { x: Dropable("b.c.x"), y: Dropable("b.c.y") },
d: A { x: Dropable("b.d.x"), y: Dropable("b.d.y") },
};
let d = move || println!("{:?} {:?} {:?} {:?}", b.d.y, b.d.x, b.c.y, b.c.x);
d();
let r = R {
c: &A { x: Dropable("r.c.x"), y: Dropable("r.c.y") },
d: &A { x: Dropable("r.d.x"), y: Dropable("r.d.y") },
};
let e = move || println!("{:?} {:?} {:?} {:?}", r.d.y, r.d.x, r.c.y, r.c.x);
e();
}