From ad0e4974c88211a3ca5abc40cd033049cd352206 Mon Sep 17 00:00:00 2001 From: metagn Date: Sat, 27 May 2023 21:09:34 +0300 Subject: [PATCH] support generic void return type for templates (#21934) fixes #21920 (cherry picked from commit 2dcc7195daab5964a68d7eb6edf897edc0cf2052) --- compiler/sem.nim | 7 +++++-- tests/template/template_issues.nim | 6 ++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/compiler/sem.nim b/compiler/sem.nim index 09bd90c64fbf..4531947dc2bb 100644 --- a/compiler/sem.nim +++ b/compiler/sem.nim @@ -465,8 +465,11 @@ proc semAfterMacroCall(c: PContext, call, macroResult: PNode, retType = generateTypeInstance(c, paramTypes, macroResult.info, retType) - result = semExpr(c, result, flags, expectedType) - result = fitNode(c, retType, result, result.info) + if retType.kind == tyVoid: + result = semStmt(c, result, flags) + else: + result = semExpr(c, result, flags, expectedType) + result = fitNode(c, retType, result, result.info) #globalError(s.info, errInvalidParamKindX, typeToString(s.typ[0])) dec(c.config.evalTemplateCounter) discard c.friendModules.pop() diff --git a/tests/template/template_issues.nim b/tests/template/template_issues.nim index 1fed694efb55..58c40941db69 100644 --- a/tests/template/template_issues.nim +++ b/tests/template/template_issues.nim @@ -296,3 +296,9 @@ block: # bug #12595 discard {i: ""} test() + +block: # bug #21920 + template t[T](): T = + discard + + t[void]() # Error: expression has no type: discard