contract Test { struct S { u32 x; u32 y; u256 z; } struct X { u32 x; S s; u32[2] a; } X m_x; fn load() -> ( u256 a, u256 x, u256 y, u256 z, u256 a1, u256 a2 ) { m_x.x = 1; m_x.s.x = 2; m_x.s.y = 3; m_x.s.z = 4; m_x.a[0] = 5; m_x.a[1] = 6; X d = m_x; a = d.x; x = d.s.x; y = d.s.y; z = d.s.z; a1 = d.a[0]; a2 = d.a[1]; } fn store() -> ( u256 a, u256 x, u256 y, u256 z, u256 a1, u256 a2 ) { X d; d.x = 1; d.s.x = 2; d.s.y = 3; d.s.z = 4; d.a[0] = 5; d.a[1] = 6; m_x = d; a = m_x.x; x = m_x.s.x; y = m_x.s.y; z = m_x.s.z; a1 = m_x.a[0]; a2 = m_x.a[1]; } } // ==== // compileToEwasm: also // compileViaYul: also // ---- // load() -> 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 // gas irOptimized: 111425 // gas legacy: 112999 // gas legacyOptimized: 110881 // store() -> 0x01, 0x02, 0x03, 0x04, 0x05, 0x06