From c47d5196be8485532fc585a5d0fb219247e17b60 Mon Sep 17 00:00:00 2001 From: Yuriy Glukhov Date: Mon, 5 Dec 2022 22:49:31 +0100 Subject: [PATCH] Dont produce initing moves for sfNoInit variables in closure env (#21026) --- compiler/injectdestructors.nim | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler/injectdestructors.nim b/compiler/injectdestructors.nim index c245d8d6b..20e790202 100644 --- a/compiler/injectdestructors.nim +++ b/compiler/injectdestructors.nim @@ -829,7 +829,10 @@ proc p(n: PNode; c: var Con; s: var Scope; mode: ProcessMode; tmpFlags = {sfSing if ri.kind != nkEmpty: result.add moveOrCopy(v, ri, c, s, if v.kind == nkSym: {IsDecl} else: {}) elif ri.kind == nkEmpty and c.inLoop > 0: - result.add moveOrCopy(v, genDefaultCall(v.typ, c, v.info), c, s, if v.kind == nkSym: {IsDecl} else: {}) + let skipInit = v.kind == nkDotExpr and # Closure var + sfNoInit in v[1].sym.flags + if not skipInit: + result.add moveOrCopy(v, genDefaultCall(v.typ, c, v.info), c, s, if v.kind == nkSym: {IsDecl} else: {}) else: # keep the var but transform 'ri': var v = copyNode(n) var itCopy = copyNode(it)