union X { int; Y[]; UniquePtr; }; union Y { X; Z; }; union Z { double; X; }; [ChildProc=any] protocol PUniquePtrRecUnion { child: async Test(X x, Y y, Z z); async __delete__(); };