From 149c0ad46f559e1922b20984454d094e79c0fcc4 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) (cherry picked from commit c47d5196be8485532fc585a5d0fb219247e17b60) --- compiler/injectdestructors.nim | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler/injectdestructors.nim b/compiler/injectdestructors.nim index deef33dd55..539956dd3e 100644 --- a/compiler/injectdestructors.nim +++ b/compiler/injectdestructors.nim @@ -879,7 +879,10 @@ proc p(n: PNode; c: var Con; s: var Scope; mode: ProcessMode): PNode = if ri.kind != nkEmpty: result.add moveOrCopy(v, ri, c, s, isDecl = v.kind == nkSym) elif ri.kind == nkEmpty and c.inLoop > 0: - result.add moveOrCopy(v, genDefaultCall(v.typ, c, v.info), c, s, isDecl = v.kind == nkSym) + 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, isDecl = v.kind == nkSym) else: # keep the var but transform 'ri': var v = copyNode(n) var itCopy = copyNode(it)