============ initial translation from Move ================ [variant baseline] public fun CopyStruct::g() { var $t0|s1: CopyStruct::S var $t1|s2: CopyStruct::S var $t2: address var $t3: CopyStruct::S var $t4: u64 var $t5: &CopyStruct::S var $t6: &address var $t7: address var $t8: &mut CopyStruct::G var $t9: &mut u64 var $t10: address var $t11: CopyStruct::S var $t12: u64 var $t13: &CopyStruct::S var $t14: &address var $t15: address var $t16: &mut CopyStruct::G var $t17: &mut u64 0: $t2 := 0x7 1: $t3 := CopyStruct::ret_struct_copy($t2) 2: $t0 := $t3 3: $t4 := 1 4: $t5 := borrow_local($t0) 5: $t6 := borrow_field.a($t5) 6: $t7 := read_ref($t6) 7: $t8 := borrow_global($t7) 8: $t9 := borrow_field.f($t8) 9: write_ref($t9, $t4) 10: $t10 := 0x7 11: $t11 := CopyStruct::ret_struct($t10) 12: $t1 := $t11 13: $t12 := 2 14: $t13 := borrow_local($t1) 15: $t14 := borrow_field.a($t13) 16: $t15 := read_ref($t14) 17: $t16 := borrow_global($t15) 18: $t17 := borrow_field.f($t16) 19: write_ref($t17, $t12) 20: return () } [variant baseline] public fun CopyStruct::ret_struct($t0|a: address): CopyStruct::S { var $t1: address var $t2: CopyStruct::S 0: $t1 := move($t0) 1: $t2 := pack CopyStruct::S($t1) 2: return $t2 } [variant baseline] public fun CopyStruct::ret_struct_copy($t0|a: address): CopyStruct::S { var $t1|s: CopyStruct::S var $t2: address var $t3: CopyStruct::S var $t4: &CopyStruct::S var $t5: CopyStruct::S 0: $t2 := move($t0) 1: $t3 := pack CopyStruct::S($t2) 2: $t1 := $t3 3: $t4 := borrow_local($t1) 4: $t5 := read_ref($t4) 5: return $t5 } ============ after pipeline `read_write_set` ================ [variant baseline] public fun CopyStruct::g() { var $t0|s1: CopyStruct::S var $t1|s2: CopyStruct::S var $t2: address var $t3: CopyStruct::S var $t4: u64 var $t5: &CopyStruct::S var $t6: &address var $t7: address var $t8: &mut CopyStruct::G var $t9: &mut u64 var $t10: address var $t11: CopyStruct::S var $t12: u64 var $t13: &CopyStruct::S var $t14: &address var $t15: address var $t16: &mut CopyStruct::G var $t17: &mut u64 # Accesses: # 0x7/0x1::CopyStruct::G/f: Write # # Locals: # 0: $t2 := 0x7 1: $t3 := CopyStruct::ret_struct_copy($t2) 2: $t0 := $t3 3: $t4 := 1 4: $t5 := borrow_local($t0) 5: $t6 := borrow_field.a($t5) 6: $t7 := read_ref($t6) 7: $t8 := borrow_global($t7) 8: $t9 := borrow_field.f($t8) 9: write_ref($t9, $t4) 10: $t10 := 0x7 11: $t11 := CopyStruct::ret_struct($t10) 12: $t1 := $t11 13: $t12 := 2 14: $t13 := borrow_local($t1) 15: $t14 := borrow_field.a($t13) 16: $t15 := read_ref($t14) 17: $t16 := borrow_global($t15) 18: $t17 := borrow_field.f($t16) 19: write_ref($t17, $t12) 20: return () } [variant baseline] public fun CopyStruct::ret_struct($t0|a: address): CopyStruct::S { var $t1: address var $t2: CopyStruct::S # Accesses: # Formal(0): Read # # Locals: # Ret(0)/a: Formal(0) # 0: $t1 := move($t0) 1: $t2 := pack CopyStruct::S($t1) 2: return $t2 } [variant baseline] public fun CopyStruct::ret_struct_copy($t0|a: address): CopyStruct::S { var $t1|s: CopyStruct::S var $t2: address var $t3: CopyStruct::S var $t4: &CopyStruct::S var $t5: CopyStruct::S # Accesses: # Formal(0): Read # # Locals: # Ret(0)/a: Formal(0) # 0: $t2 := move($t0) 1: $t3 := pack CopyStruct::S($t2) 2: $t1 := $t3 3: $t4 := borrow_local($t1) 4: $t5 := read_ref($t4) 5: return $t5 }