address 0x2 { module Summary { struct S1 has key { s2: S2 } struct S2 has key, store { f: u64 } public fun write_callee(s2: &mut S2) { s2.f = 7; } public fun write_caller1(a: address) acquires S2 { write_callee(borrow_global_mut(a)) } public fun write_caller2(a: address) acquires S1 { write_callee(&mut borrow_global_mut(a).s2) } public fun write_addr() acquires S1 { write_caller2(@0x777); } } }