llgo/ssa getDefer fix: move to function start
This commit is contained in:
@@ -191,11 +191,12 @@ func (b Builder) deferKey() Expr {
|
||||
func (b Builder) getDefer() *aDefer {
|
||||
self := b.Func
|
||||
if self.defer_ == nil {
|
||||
// TODO(xsw): move to funtion start
|
||||
// TODO(xsw): if in pkg.init?
|
||||
// 0: proc func(uintptr)
|
||||
// 1: bits uintptr
|
||||
// 2: link *Defer
|
||||
// 3: rund int
|
||||
b.SetBlockEx(b.blk, AtStart, false)
|
||||
prog := b.Prog
|
||||
key := b.deferKey()
|
||||
deferfn := prog.Null(prog.VoidPtr())
|
||||
@@ -204,6 +205,7 @@ func (b Builder) getDefer() *aDefer {
|
||||
ptr := b.aggregateAlloca(prog.Defer(), deferfn.impl, zero.impl, link.impl)
|
||||
deferData := Expr{ptr, prog.DeferPtr()}
|
||||
b.pthreadSetspecific(key, deferData)
|
||||
b.SetBlockEx(b.blk, AtEnd, false)
|
||||
self.defer_ = &aDefer{
|
||||
key: key,
|
||||
data: deferData,
|
||||
|
||||
Reference in New Issue
Block a user