asyncio: trap on unexpected resume

This commit is contained in:
Li Jie
2024-08-05 15:19:42 +08:00
parent a1fdc05e26
commit 3bf0780a67
6 changed files with 34 additions and 10 deletions

View File

@@ -55,6 +55,13 @@ func (p Program) tySiglongjmp() *types.Signature {
return p.sigljmpTy
}
func (p Program) tyLLVMTrap() *types.Signature {
if p.llvmTrapTy == nil {
p.llvmTrapTy = types.NewSignatureType(nil, nil, nil, nil, nil, false)
}
return p.llvmTrapTy
}
func (b Builder) AllocaSigjmpBuf() Expr {
prog := b.Prog
n := unsafe.Sizeof(sigjmpbuf{})
@@ -77,6 +84,11 @@ func (b Builder) Siglongjmp(jb, retval Expr) {
// b.Unreachable()
}
func (b Builder) LLVMTrap() {
fn := b.Pkg.cFunc("llvm.trap", b.Prog.tyLLVMTrap())
b.Call(fn)
}
// -----------------------------------------------------------------------------
const (