============ initial translation from Move ================ [variant baseline] public fun TestMutRefs::data_invariant($t0|_x: &mut TestMutRefs::T) { 0: return () } [variant baseline] public fun TestMutRefs::decrement_invalid($t0|x: &mut TestMutRefs::T) { var $t1|r: &mut TestMutRefs::TSum var $t2: &mut TestMutRefs::T var $t3: &u64 var $t4: u64 var $t5: u64 var $t6: u64 var $t7: &mut TestMutRefs::T var $t8: &mut u64 var $t9: address var $t10: &mut TestMutRefs::TSum var $t11: &mut TestMutRefs::TSum var $t12: &u64 var $t13: u64 var $t14: u64 var $t15: u64 var $t16: &mut TestMutRefs::TSum var $t17: &mut u64 0: $t2 := copy($t0) 1: $t3 := borrow_field.value($t2) 2: $t4 := read_ref($t3) 3: $t5 := 1 4: $t6 := -($t4, $t5) 5: $t7 := move($t0) 6: $t8 := borrow_field.value($t7) 7: write_ref($t8, $t6) 8: $t9 := 0x0 9: $t10 := borrow_global($t9) 10: $t1 := $t10 11: $t11 := copy($t1) 12: $t12 := borrow_field.sum($t11) 13: $t13 := read_ref($t12) 14: $t14 := 1 15: $t15 := -($t13, $t14) 16: $t16 := move($t1) 17: $t17 := borrow_field.sum($t16) 18: write_ref($t17, $t15) 19: return () } [variant baseline] public fun TestMutRefs::delete($t0|x: TestMutRefs::T) { var $t1|r: &mut TestMutRefs::TSum var $t2|v: u64 var $t3: address var $t4: &mut TestMutRefs::TSum var $t5: TestMutRefs::T var $t6: u64 var $t7: &mut TestMutRefs::TSum var $t8: &u64 var $t9: u64 var $t10: u64 var $t11: u64 var $t12: &mut TestMutRefs::TSum var $t13: &mut u64 0: $t3 := 0x0 1: $t4 := borrow_global($t3) 2: $t1 := $t4 3: $t5 := move($t0) 4: $t6 := unpack TestMutRefs::T($t5) 5: $t2 := $t6 6: $t7 := copy($t1) 7: $t8 := borrow_field.sum($t7) 8: $t9 := read_ref($t8) 9: $t10 := move($t2) 10: $t11 := -($t9, $t10) 11: $t12 := move($t1) 12: $t13 := borrow_field.sum($t12) 13: write_ref($t13, $t11) 14: return () } [variant baseline] public fun TestMutRefs::increment($t0|x: &mut TestMutRefs::T) { var $t1|r: &mut TestMutRefs::TSum var $t2: &mut TestMutRefs::T var $t3: &u64 var $t4: u64 var $t5: u64 var $t6: u64 var $t7: &mut TestMutRefs::T var $t8: &mut u64 var $t9: address var $t10: &mut TestMutRefs::TSum var $t11: &mut TestMutRefs::TSum var $t12: &u64 var $t13: u64 var $t14: u64 var $t15: u64 var $t16: &mut TestMutRefs::TSum var $t17: &mut u64 0: $t2 := copy($t0) 1: $t3 := borrow_field.value($t2) 2: $t4 := read_ref($t3) 3: $t5 := 1 4: $t6 := +($t4, $t5) 5: $t7 := move($t0) 6: $t8 := borrow_field.value($t7) 7: write_ref($t8, $t6) 8: $t9 := 0x0 9: $t10 := borrow_global($t9) 10: $t1 := $t10 11: $t11 := copy($t1) 12: $t12 := borrow_field.sum($t11) 13: $t13 := read_ref($t12) 14: $t14 := 1 15: $t15 := +($t13, $t14) 16: $t16 := move($t1) 17: $t17 := borrow_field.sum($t16) 18: write_ref($t17, $t15) 19: return () } [variant baseline] public fun TestMutRefs::increment_invalid($t0|x: &mut TestMutRefs::T) { var $t1: &mut TestMutRefs::T var $t2: &u64 var $t3: u64 var $t4: u64 var $t5: u64 var $t6: &mut TestMutRefs::T var $t7: &mut u64 0: $t1 := copy($t0) 1: $t2 := borrow_field.value($t1) 2: $t3 := read_ref($t2) 3: $t4 := 1 4: $t5 := +($t3, $t4) 5: $t6 := move($t0) 6: $t7 := borrow_field.value($t6) 7: write_ref($t7, $t5) 8: return () } [variant baseline] public fun TestMutRefs::new($t0|x: u64): TestMutRefs::T { var $t1|r: &mut TestMutRefs::TSum var $t2: address var $t3: &mut TestMutRefs::TSum var $t4: &mut TestMutRefs::TSum var $t5: &u64 var $t6: u64 var $t7: u64 var $t8: u64 var $t9: &mut TestMutRefs::TSum var $t10: &mut u64 var $t11: u64 var $t12: TestMutRefs::T 0: $t2 := 0x0 1: $t3 := borrow_global($t2) 2: $t1 := $t3 3: $t4 := copy($t1) 4: $t5 := borrow_field.sum($t4) 5: $t6 := read_ref($t5) 6: $t7 := copy($t0) 7: $t8 := +($t6, $t7) 8: $t9 := move($t1) 9: $t10 := borrow_field.sum($t9) 10: write_ref($t10, $t8) 11: $t11 := move($t0) 12: $t12 := pack TestMutRefs::T($t11) 13: return $t12 } [variant baseline] fun TestMutRefs::private_data_invariant_invalid($t0|_x: &mut TestMutRefs::T) { 0: return () } [variant baseline] fun TestMutRefs::private_decrement($t0|x: &mut TestMutRefs::T) { var $t1|r: &mut TestMutRefs::TSum var $t2: &mut TestMutRefs::T var $t3: &u64 var $t4: u64 var $t5: u64 var $t6: u64 var $t7: &mut TestMutRefs::T var $t8: &mut u64 var $t9: address var $t10: &mut TestMutRefs::TSum var $t11: &mut TestMutRefs::TSum var $t12: &u64 var $t13: u64 var $t14: u64 var $t15: u64 var $t16: &mut TestMutRefs::TSum var $t17: &mut u64 0: $t2 := copy($t0) 1: $t3 := borrow_field.value($t2) 2: $t4 := read_ref($t3) 3: $t5 := 1 4: $t6 := -($t4, $t5) 5: $t7 := move($t0) 6: $t8 := borrow_field.value($t7) 7: write_ref($t8, $t6) 8: $t9 := 0x0 9: $t10 := borrow_global($t9) 10: $t1 := $t10 11: $t11 := copy($t1) 12: $t12 := borrow_field.sum($t11) 13: $t13 := read_ref($t12) 14: $t14 := 1 15: $t15 := -($t13, $t14) 16: $t16 := move($t1) 17: $t17 := borrow_field.sum($t16) 18: write_ref($t17, $t15) 19: return () } [variant baseline] fun TestMutRefs::private_to_public_caller($t0|r: &mut TestMutRefs::T) { var $t1: &mut TestMutRefs::T 0: $t1 := move($t0) 1: TestMutRefs::increment($t1) 2: return () } [variant baseline] fun TestMutRefs::private_to_public_caller_invalid_data_invariant() { var $t0|r: &mut TestMutRefs::T var $t1|x: TestMutRefs::T var $t2: u64 var $t3: TestMutRefs::T var $t4: &mut TestMutRefs::T var $t5: &mut TestMutRefs::T var $t6: &mut TestMutRefs::T 0: $t2 := 1 1: $t3 := TestMutRefs::new($t2) 2: $t1 := $t3 3: $t4 := borrow_local($t1) 4: $t0 := $t4 5: $t5 := copy($t0) 6: TestMutRefs::private_decrement($t5) 7: $t6 := move($t0) 8: TestMutRefs::increment($t6) 9: return () } [variant baseline] public fun TestMutRefsUser::valid() { var $t0|x: TestMutRefs::T var $t1: u64 var $t2: TestMutRefs::T var $t3: &mut TestMutRefs::T var $t4: TestMutRefs::T 0: $t1 := 4 1: $t2 := TestMutRefs::new($t1) 2: $t0 := $t2 3: $t3 := borrow_local($t0) 4: TestMutRefs::increment($t3) 5: $t4 := move($t0) 6: TestMutRefs::delete($t4) 7: return () } ============ after pipeline `memory_instr` ================ [variant baseline] public fun TestMutRefs::data_invariant($t0|_x: &mut TestMutRefs::T) { 0: trace_local[_x]($t0) 1: return () } [variant baseline] public fun TestMutRefs::decrement_invalid($t0|x: &mut TestMutRefs::T) { var $t1|r: &mut TestMutRefs::TSum var $t2: u64 var $t3: u64 var $t4: u64 var $t5: &mut u64 var $t6: address var $t7: &mut TestMutRefs::TSum var $t8: u64 var $t9: u64 var $t10: u64 var $t11: &mut u64 0: $t2 := get_field.value($t0) 1: $t3 := 1 2: $t4 := -($t2, $t3) 3: $t5 := borrow_field.value($t0) 4: write_ref($t5, $t4) 5: write_back[Reference($t0).value (u64)]($t5) 6: trace_local[x]($t0) 7: $t6 := 0x0 8: $t7 := borrow_global($t6) 9: $t8 := get_field.sum($t7) 10: $t9 := 1 11: $t10 := -($t8, $t9) 12: $t11 := borrow_field.sum($t7) 13: write_ref($t11, $t10) 14: write_back[Reference($t7).sum (u64)]($t11) 15: write_back[TestMutRefs::TSum@]($t7) 16: trace_local[x]($t0) 17: return () } [variant baseline] public fun TestMutRefs::delete($t0|x: TestMutRefs::T) { var $t1|r: &mut TestMutRefs::TSum var $t2|v: u64 var $t3: address var $t4: &mut TestMutRefs::TSum var $t5: u64 var $t6: u64 var $t7: u64 var $t8: &mut u64 0: $t3 := 0x0 1: $t4 := borrow_global($t3) 2: $t5 := unpack TestMutRefs::T($t0) 3: $t6 := get_field.sum($t4) 4: $t7 := -($t6, $t5) 5: $t8 := borrow_field.sum($t4) 6: write_ref($t8, $t7) 7: write_back[Reference($t4).sum (u64)]($t8) 8: write_back[TestMutRefs::TSum@]($t4) 9: return () } [variant baseline] public fun TestMutRefs::increment($t0|x: &mut TestMutRefs::T) { var $t1|r: &mut TestMutRefs::TSum var $t2: u64 var $t3: u64 var $t4: u64 var $t5: &mut u64 var $t6: address var $t7: &mut TestMutRefs::TSum var $t8: u64 var $t9: u64 var $t10: u64 var $t11: &mut u64 0: $t2 := get_field.value($t0) 1: $t3 := 1 2: $t4 := +($t2, $t3) 3: $t5 := borrow_field.value($t0) 4: write_ref($t5, $t4) 5: write_back[Reference($t0).value (u64)]($t5) 6: trace_local[x]($t0) 7: $t6 := 0x0 8: $t7 := borrow_global($t6) 9: $t8 := get_field.sum($t7) 10: $t9 := 1 11: $t10 := +($t8, $t9) 12: $t11 := borrow_field.sum($t7) 13: write_ref($t11, $t10) 14: write_back[Reference($t7).sum (u64)]($t11) 15: write_back[TestMutRefs::TSum@]($t7) 16: trace_local[x]($t0) 17: return () } [variant baseline] public fun TestMutRefs::increment_invalid($t0|x: &mut TestMutRefs::T) { var $t1: u64 var $t2: u64 var $t3: u64 var $t4: &mut u64 0: $t1 := get_field.value($t0) 1: $t2 := 1 2: $t3 := +($t1, $t2) 3: $t4 := borrow_field.value($t0) 4: write_ref($t4, $t3) 5: write_back[Reference($t0).value (u64)]($t4) 6: trace_local[x]($t0) 7: trace_local[x]($t0) 8: return () } [variant baseline] public fun TestMutRefs::new($t0|x: u64): TestMutRefs::T { var $t1|r: &mut TestMutRefs::TSum var $t2: address var $t3: &mut TestMutRefs::TSum var $t4: u64 var $t5: u64 var $t6: &mut u64 var $t7: TestMutRefs::T 0: $t2 := 0x0 1: $t3 := borrow_global($t2) 2: $t4 := get_field.sum($t3) 3: $t5 := +($t4, $t0) 4: $t6 := borrow_field.sum($t3) 5: write_ref($t6, $t5) 6: write_back[Reference($t3).sum (u64)]($t6) 7: write_back[TestMutRefs::TSum@]($t3) 8: $t7 := pack TestMutRefs::T($t0) 9: return $t7 } [variant baseline] fun TestMutRefs::private_data_invariant_invalid($t0|_x: &mut TestMutRefs::T) { 0: trace_local[_x]($t0) 1: return () } [variant baseline] fun TestMutRefs::private_decrement($t0|x: &mut TestMutRefs::T) { var $t1|r: &mut TestMutRefs::TSum var $t2: u64 var $t3: u64 var $t4: u64 var $t5: &mut u64 var $t6: address var $t7: &mut TestMutRefs::TSum var $t8: u64 var $t9: u64 var $t10: u64 var $t11: &mut u64 0: $t2 := get_field.value($t0) 1: $t3 := 1 2: $t4 := -($t2, $t3) 3: $t5 := borrow_field.value($t0) 4: write_ref($t5, $t4) 5: write_back[Reference($t0).value (u64)]($t5) 6: trace_local[x]($t0) 7: $t6 := 0x0 8: $t7 := borrow_global($t6) 9: $t8 := get_field.sum($t7) 10: $t9 := 1 11: $t10 := -($t8, $t9) 12: $t11 := borrow_field.sum($t7) 13: write_ref($t11, $t10) 14: write_back[Reference($t7).sum (u64)]($t11) 15: write_back[TestMutRefs::TSum@]($t7) 16: trace_local[x]($t0) 17: return () } [variant baseline] fun TestMutRefs::private_to_public_caller($t0|r: &mut TestMutRefs::T) { 0: TestMutRefs::increment($t0) 1: trace_local[r]($t0) 2: return () } [variant baseline] fun TestMutRefs::private_to_public_caller_invalid_data_invariant() { var $t0|r: &mut TestMutRefs::T var $t1|x: TestMutRefs::T var $t2: u64 var $t3: &mut TestMutRefs::T 0: $t2 := 1 1: $t1 := TestMutRefs::new($t2) 2: $t3 := borrow_local($t1) 3: TestMutRefs::private_decrement($t3) 4: TestMutRefs::increment($t3) 5: write_back[LocalRoot($t1)@]($t3) 6: trace_local[x]($t1) 7: return () } [variant baseline] public fun TestMutRefsUser::valid() { var $t0|x: TestMutRefs::T var $t1: u64 var $t2: &mut TestMutRefs::T var $t3: TestMutRefs::T 0: $t1 := 4 1: $t0 := TestMutRefs::new($t1) 2: $t2 := borrow_local($t0) 3: TestMutRefs::increment($t2) 4: write_back[LocalRoot($t0)@]($t2) 5: trace_local[x]($t0) 6: $t3 := move($t0) 7: TestMutRefs::delete($t3) 8: return () }