From b613092de8b4b4625c8a2e8b29d64c5a8e49287e Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Mon, 22 Oct 2018 17:09:15 +0200 Subject: [PATCH] Don't crash if GC_{un,}ref is called on nil (#9445) Fixes #9442 --- compiler/ccgexprs.nim | 4 ++-- tests/magics/tmagics.nim | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index d73dac82fc..44967961eb 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -2008,8 +2008,8 @@ proc genMagicExpr(p: BProc, e: PNode, d: var TLoc, op: TMagic) = frmt = "$1 = $2->len;$n" lineCg(p, cpsStmts, frmt, tmp.r, rdLoc(a)) putIntoDest(p, d, e, tmp.r) - of mGCref: unaryStmt(p, e, d, "#nimGCref($1);$n") - of mGCunref: unaryStmt(p, e, d, "#nimGCunref($1);$n") + of mGCref: unaryStmt(p, e, d, "if ($1) { #nimGCref($1); }$n") + of mGCunref: unaryStmt(p, e, d, "if ($1) { #nimGCunref($1); }$n") of mSetLengthStr: genSetLengthStr(p, e, d) of mSetLengthSeq: genSetLengthSeq(p, e, d) of mIncl, mExcl, mCard, mLtSet, mLeSet, mEqSet, mMulSet, mPlusSet, mMinusSet, diff --git a/tests/magics/tmagics.nim b/tests/magics/tmagics.nim index d13a036bdf..841de56a58 100644 --- a/tests/magics/tmagics.nim +++ b/tests/magics/tmagics.nim @@ -43,3 +43,14 @@ block t8693: doAssert bar(Foo, Foo) doAssert bar(any, Foo) doAssert bar(Foo, any) == false + +block t9442: + var v1: ref char + var v2: string + var v3: seq[char] + GC_ref(v1) + GC_unref(v1) + GC_ref(v2) + GC_unref(v2) + GC_ref(v3) + GC_unref(v3)