summary refs log tree commit diff stats
path: root/compiler/vmgen.nim
diff options
context:
space:
mode:
authorringabout <43030857+ringabout@users.noreply.github.com>2023-09-11 16:54:41 +0800
committerGitHub <noreply@github.com>2023-09-11 10:54:41 +0200
commitb1a8d6976ff41a1cde84647b7dbade9316fbcecf (patch)
tree5d5f3e39a4df6cba464c69c99abb2684047f2242 /compiler/vmgen.nim
parentfbb5ac512cd03a67a3364469132a881341e10e1c (diff)
downloadNim-b1a8d6976ff41a1cde84647b7dbade9316fbcecf.tar.gz
fixes the `discVal` register is used after free in vmgen (#22688)
follow up https://github.com/nim-lang/Nim/pull/11955
Diffstat (limited to 'compiler/vmgen.nim')
-rw-r--r--compiler/vmgen.nim2
1 files changed, 1 insertions, 1 deletions
diff --git a/compiler/vmgen.nim b/compiler/vmgen.nim
index 05c0d2a67..2e54812a0 100644
--- a/compiler/vmgen.nim
+++ b/compiler/vmgen.nim
@@ -1822,7 +1822,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)
@@ -1835,6 +1834,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)