contract Test { struct S { u32 x; u32 y; u256 z; u32[2] a; } S[5] data; fn testInit() -> (u32 x, u32 y, u256 z, u32 a, bool flag) { S[2] d; x = d[0].x; y = d[0].y; z = d[0].z; a = d[0].a[1]; flag = true; } fn testCopyRead() -> (u32 x, u32 y, u256 z, u32 a) { data[2].x = 1; data[2].y = 2; data[2].z = 3; data[2].a[1] = 4; S s = data[2]; x = s.x; y = s.y; z = s.z; a = s.a[1]; } fn testAssign() -> (u32 x, u32 y, u256 z, u32 a) { S s; s.x = 1; s.y = 2; s.z = 3; s.a[1] = 4; x = s.x; y = s.y; z = s.z; a = s.a[1]; } } // ==== // compileViaYul: also // compileToEwasm: also // ---- // testInit() -> 0, 0, 0, 0, true // testCopyRead() -> 1, 2, 3, 4 // testAssign() -> 1, 2, 3, 4