summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorYuriy Glukhov <yglukhov@users.noreply.github.com>2022-12-05 22:49:31 +0100
committerGitHub <noreply@github.com>2022-12-05 22:49:31 +0100
commitc47d5196be8485532fc585a5d0fb219247e17b60 (patch)
tree3c738aeae7efb321a4e400df6dd28c25c7f6a34a
parentb83bd282dcd6ba8e26fc838ba968089f86b614b4 (diff)
downloadNim-c47d5196be8485532fc585a5d0fb219247e17b60.tar.gz
Dont produce initing moves for sfNoInit variables in closure env (#21026)
-rw-r--r--compiler/injectdestructors.nim5
1 files changed, 4 insertions, 1 deletions
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)