From 65e0906e690bdbfa98197463fb1d452be9142618 Mon Sep 17 00:00:00 2001 From: Yuriy Glukhov Date: Wed, 3 Aug 2022 08:46:36 +0200 Subject: [PATCH] Fixed compilation of void closureiters with try stmt (#20138) [backport] (cherry picked from commit 0d734d7966644018207a20cf23f16912f9c276d8) --- compiler/closureiters.nim | 11 +++++++---- tests/iter/tyieldintry.nim | 8 ++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/compiler/closureiters.nim b/compiler/closureiters.nim index 279329d08e..5d6feca70c 100644 --- a/compiler/closureiters.nim +++ b/compiler/closureiters.nim @@ -822,10 +822,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 9862fe1dec..9df201dd46 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