From 4c5ae4d1fcdefb00b93b47e24c7d385319bd2cbf Mon Sep 17 00:00:00 2001 From: ringabout <43030857+ringabout@users.noreply.github.com> Date: Thu, 28 May 2026 22:27:49 +0800 Subject: [PATCH] fixes #25591; error with capture in closure iterator --- compiler/lambdalifting.nim | 2 ++ tests/iter/titer_issues.nim | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/compiler/lambdalifting.nim b/compiler/lambdalifting.nim index a94db43211..3c8f4317cd 100644 --- a/compiler/lambdalifting.nim +++ b/compiler/lambdalifting.nim @@ -520,6 +520,8 @@ proc detectCapturedVars(n: PNode; owner: PSym; c: var DetectionPass) = of nkLambdaKinds, nkIteratorDef: if n.typ != nil: detectCapturedVars(n[namePos], owner, c) + of nkClosure: + detectCapturedVars(n[1], owner, c) of nkReturnStmt: detectCapturedVars(n[0], owner, c) of nkIdentDefs: diff --git a/tests/iter/titer_issues.nim b/tests/iter/titer_issues.nim index 468c230997..d94640e9be 100644 --- a/tests/iter/titer_issues.nim +++ b/tests/iter/titer_issues.nim @@ -239,6 +239,17 @@ block t2023_objiter: var o = init() echo(o.iter()) + block: # bug #25591 + iterator h(): int = + let n = 0 + (proc() = discard n)() + yield 0 + + proc a() = + iterator m(): int {.closure.} = (for _ in h(): discard) + let _ = m + + a() block: # bug #13739