From cc49bf07fecc324a6d4db3bc0968f34da6d400ef Mon Sep 17 00:00:00 2001 From: ringabout <43030857+ringabout@users.noreply.github.com> Date: Sat, 27 Sep 2025 11:54:22 +0800 Subject: [PATCH] fixes #21138; closure `func` used in the loop (#25196) fixes #21138 --- compiler/transf.nim | 2 +- tests/iter/titer.nim | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/compiler/transf.nim b/compiler/transf.nim index a8296d2f25..7ad4634ea3 100644 --- a/compiler/transf.nim +++ b/compiler/transf.nim @@ -329,7 +329,7 @@ proc introduceNewLocalVars(c: PTransf, n: PNode): PNode = if a.kind == nkSym: n[1] = transformSymAux(c, a) return n - of nkProcDef: # todo optimize nosideeffects? + of nkProcDef, nkFuncDef, nkMethodDef, nkConverterDef: # todo optimize nosideeffects? result = newTransNode(n) let x = newSymNode(copySym(n[namePos].sym, c.idgen)) c.transCon.mapping[n[namePos].sym.itemId] = x diff --git a/tests/iter/titer.nim b/tests/iter/titer.nim index b03d43f36c..1587f45844 100644 --- a/tests/iter/titer.nim +++ b/tests/iter/titer.nim @@ -145,3 +145,18 @@ proc main123() = discard main123() + +# bug #21138 +iterator ubi(): int = + when nimvm: + yield 0 + else: + yield 0 + +block: + for k in ubi(): + func e() {.closure.} = discard + +static: + for k in ubi(): + func e() {.closure.} = discard