============ 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 │ │ }
│ ╰─────^