address 0x42 { module M0 { struct Foo { f: Foo } } module M1 { struct Cup { f: T } struct Foo { f: Cup } // blows up the stack public fun foo(): Foo { Foo { f: Cup { f: foo() }} } } module M2 { use std::signer; struct X has key, store { y: vector } struct Y has key, store { x: vector } // blows up the vm public fun ex(account: &signer): bool { let sender = signer::address_of(account); exists(sender) } // blows up the VM public fun borrow(account: &signer) acquires X { let sender = signer::address_of(account); _ = borrow_global(sender) } } module M3 { use 0x42::M1; struct Foo { f: M1::Cup } } module M4 { use 0x42::M1; struct A { b: B } struct B { c: C } struct C { d: vector } struct D { x: M1::Cup>> } } }