summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorYuriy Glukhov <yglukhov@users.noreply.github.com>2022-08-03 08:46:36 +0200
committerGitHub <noreply@github.com>2022-08-03 08:46:36 +0200
commit0d734d7966644018207a20cf23f16912f9c276d8 (patch)
tree900f78c48b44ab784583ae4294eeba4c52d89694
parent02cbd7dc5360a175ca32d13ce0fe06467d59d51e (diff)
downloadNim-0d734d7966644018207a20cf23f16912f9c276d8.tar.gz
Fixed compilation of void closureiters with try stmt (#20138) [backport]
-rw-r--r--compiler/closureiters.nim11
-rw-r--r--tests/iter/tyieldintry.nim8
2 files changed, 15 insertions, 4 deletions
diff --git a/compiler/closureiters.nim b/compiler/closureiters.nim
index 2848942fa..613fbe582 100644
--- a/compiler/closureiters.nim
+++ b/compiler/closureiters.nim
@@ -825,10 +825,13 @@ proc newEndFinallyNode(ctx: var Ctx, info: TLineInfo): PNode =
   let retStmt =
     if ctx.nearestFinally == 0:
       # last finally, we can return
-      let asgn = newTree(nkFastAsgn,
-        newSymNode(getClosureIterResult(ctx.g, ctx.fn, ctx.idgen), info),
-        ctx.newTmpResultAccess())
-      newTree(nkReturnStmt, asgn)
+      let retValue = if ctx.fn.typ[0].isNil:
+                   ctx.g.emptyNode
+                 else:
+                   newTree(nkFastAsgn,
+                           newSymNode(getClosureIterResult(ctx.g, ctx.fn, ctx.idgen), info),
+                           ctx.newTmpResultAccess())
+      newTree(nkReturnStmt, retValue)
     else:
       # bubble up to next finally
       newTree(nkGotoState, ctx.g.newIntLit(info, ctx.nearestFinally))
diff --git a/tests/iter/tyieldintry.nim b/tests/iter/tyieldintry.nim
index 9862fe1de..9df201dd4 100644
--- a/tests/iter/tyieldintry.nim
+++ b/tests/iter/tyieldintry.nim
@@ -495,3 +495,11 @@ block: #17849 - yield in case subject
     yield 5
 
   test(it, 1, 2, 13, 5)
+
+block: # void iterator
+  iterator it() {.closure.} =
+    try:
+      yield
+    except:
+      discard
+  var a = it