refs #16613: check opcWrDeref for nil (#18613)

This commit is contained in:
Timothee Cour 2021-07-30 00:30:22 -07:00 • committed by GitHub
commit 9a26f5059b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -812,11 +812,10 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg =
# vmgen generates opcWrDeref, which means that we must dereference # vmgen generates opcWrDeref, which means that we must dereference
# twice. # twice.
# TODO: This should likely be handled differently in vmgen. # TODO: This should likely be handled differently in vmgen.
if (nfIsRef notin regs[ra].nodeAddr[].flags and let nAddr = regs[ra].nodeAddr
nfIsRef notin n.flags): if nAddr[] == nil: stackTrace(c, tos, pc, "opcWrDeref internal error") # refs bug #16613
regs[ra].nodeAddr[][] = n[] if (nfIsRef notin nAddr[].flags and nfIsRef notin n.flags): nAddr[][] = n[]
else: else: nAddr[] = n
regs[ra].nodeAddr[] = n
of rkRegisterAddr: regs[ra].regAddr[] = regs[rc] of rkRegisterAddr: regs[ra].regAddr[] = regs[rc]
of rkNode: of rkNode:
# xxx: also check for nkRefTy as in opcLdDeref? # xxx: also check for nkRefTy as in opcLdDeref?