From 6a63df181f71635538dd29aed0365b663800016e Mon Sep 17 00:00:00 2001 From: Nikolay Nikolov Date: Wed, 1 May 2024 23:56:16 +0300 Subject: [PATCH] [backport v1.6.x] fixes the `discVal` register is used after free in vmgen (#22688) (#23553) follow up https://github.com/nim-lang/Nim/pull/11955 (cherry picked from commit b1a8d6976ff41a1cde84647b7dbade9316fbcecf) Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com> --- compiler/vmgen.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/vmgen.nim b/compiler/vmgen.nim index 099d4d7809..749fd52dfc 100644 --- a/compiler/vmgen.nim +++ b/compiler/vmgen.nim @@ -1825,7 +1825,6 @@ proc genCheckedObjAccessAux(c: PCtx; n: PNode; dest: var TDest; flags: TGenFlags let setLit = c.genx(checkExpr[1]) var rs = c.getTemp(getSysType(c.graph, n.info, tyBool)) c.gABC(n, opcContainsSet, rs, setLit, discVal) - c.freeTemp(discVal) c.freeTemp(setLit) # If the check fails let the user know let lab1 = c.xjmp(n, if negCheck: opcFJmp else: opcTJmp, rs) @@ -1838,6 +1837,7 @@ proc genCheckedObjAccessAux(c: PCtx; n: PNode; dest: var TDest; flags: TGenFlags strLit.typ = strType c.genLit(strLit, msgReg) c.gABC(n, opcInvalidField, msgReg, discVal) + c.freeTemp(discVal) c.freeTemp(msgReg) c.patch(lab1)