move-stackless-bytecode 0.3.2

Move stackless bytecode
Documentation
============ initial translation from Move ================

[variant baseline]
public fun StructEq::leak_f($t0|s: &mut StructEq::S): &mut u64 {
     var $t1: &mut StructEq::S
     var $t2: &mut u64
  0: $t1 := move($t0)
  1: $t2 := borrow_field<StructEq::S>.f($t1)
  2: return $t2
}


[variant baseline]
public fun StructEq::new(): StructEq::S {
     var $t0: u64
     var $t1: StructEq::S
  0: $t0 := 10
  1: $t1 := pack StructEq::S($t0)
  2: return $t1
}


[variant baseline]
public fun StructEq::publish($t0|account: &signer, $t1|s: StructEq::S) {
     var $t2: &signer
     var $t3: StructEq::S
  0: $t2 := move($t0)
  1: $t3 := move($t1)
  2: move_to<StructEq::S>($t3, $t2)
  3: return ()
}

============ after pipeline `escape_analysis` ================

[variant baseline]
public fun StructEq::leak_f($t0|s: &mut StructEq::S): &mut u64 {
     var $t1: &mut StructEq::S
     var $t2: &mut u64
  0: $t1 := move($t0)
  1: $t2 := borrow_field<StructEq::S>.f($t1)
  2: return $t2
}


[variant baseline]
public fun StructEq::new(): StructEq::S {
     var $t0: u64
     var $t1: StructEq::S
  0: $t0 := 10
  1: $t1 := pack StructEq::S($t0)
  2: return $t1
}


[variant baseline]
public fun StructEq::publish($t0|account: &signer, $t1|s: StructEq::S) {
     var $t2: &signer
     var $t3: StructEq::S
  0: $t2 := move($t0)
  1: $t3 := move($t1)
  2: move_to<StructEq::S>($t3, $t2)
  3: return ()
}

============ Diagnostics ================
error: Leaked mutable module-internal reference via return value 0
   ┌─ tests/escape_analysis/global_struct_eq.move:16:5
   │
16 │ ╭     public fun leak_f(s: &mut S): &mut u64 {
17 │ │         &mut s.f
18 │ │     }
   │ ╰─────^