struct A { B b; } struct B { A[] a; mapping(uint=>A) m; } struct C { B b; D d; } struct D { uint e; } abstract contract Foo {}