2018-09-04 05:05:53 -05:00
|
|
|
// run-pass
|
2021-05-21 12:35:49 -05:00
|
|
|
#![allow(dead_code)]
|
2018-03-02 22:42:37 -06:00
|
|
|
#![deny(unused_mut)]
|
|
|
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
struct A {}
|
|
|
|
|
|
|
|
fn init_a() -> A {
|
|
|
|
A {}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
struct B<'a> {
|
|
|
|
ed: &'a mut A,
|
|
|
|
}
|
|
|
|
|
|
|
|
fn init_b<'a>(ed: &'a mut A) -> B<'a> {
|
|
|
|
B { ed }
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
struct C<'a> {
|
|
|
|
pd: &'a mut B<'a>,
|
|
|
|
}
|
|
|
|
|
|
|
|
fn init_c<'a>(pd: &'a mut B<'a>) -> C<'a> {
|
|
|
|
C { pd }
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
struct D<'a> {
|
|
|
|
sd: &'a mut C<'a>,
|
|
|
|
}
|
|
|
|
|
|
|
|
fn init_d<'a>(sd: &'a mut C<'a>) -> D<'a> {
|
|
|
|
D { sd }
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let mut a = init_a();
|
|
|
|
let mut b = init_b(&mut a);
|
|
|
|
let mut c = init_c(&mut b);
|
|
|
|
|
|
|
|
let d = init_d(&mut c);
|
|
|
|
|
|
|
|
println!("{:?}", d)
|
|
|
|
}
|