diff options
author | Yuriy Glukhov <yglukhov@users.noreply.github.com> | 2022-08-03 08:46:36 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-03 08:46:36 +0200 |
commit | 0d734d7966644018207a20cf23f16912f9c276d8 (patch) | |
tree | 900f78c48b44ab784583ae4294eeba4c52d89694 | |
parent | 02cbd7dc5360a175ca32d13ce0fe06467d59d51e (diff) | |
download | Nim-0d734d7966644018207a20cf23f16912f9c276d8.tar.gz |
Fixed compilation of void closureiters with try stmt (#20138) [backport]
-rw-r--r-- | compiler/closureiters.nim | 11 | ||||
-rw-r--r-- | tests/iter/tyieldintry.nim | 8 |
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 |