VM: fixes register leaks [backport] (#12510)

This commit is contained in:
Andreas Rumpf 2019-10-25 00:45:06 +02:00 • committed by GitHub
commit e0d13abaff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1443,6 +1443,7 @@ proc genDeref(c: PCtx, n: PNode, dest: var TDest, flags: TGenFlags) =
assert n.typ != nil
if {gfNodeAddr, gfNode} * flags == {} and fitsRegister(n.typ):
c.gABC(n, opcNodeToReg, dest, dest)
c.freeTemp(tmp)
proc genAsgn(c: PCtx; dest: TDest; ri: PNode; requiresCopy: bool) =
let tmp = c.genx(ri)
@ -1532,6 +1533,7 @@ proc genAsgn(c: PCtx; le, ri: PNode; requiresCopy: bool) =
c.preventFalseAlias(le, opcWrObj, dest, idx, tmp)
c.freeTemp(idx)
c.freeTemp(tmp)
c.freeTemp(dest)
of nkDerefExpr, nkHiddenDeref:
let dest = c.genx(le.sons[0], {gfNode})
let tmp = c.genx(ri)