diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index 81be6772526f..596995adb521 100644 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -370,8 +370,7 @@ proc addToVarSection(c: PContext; result: var PNode; orig, identDefs: PNode) = result.add identDefs proc isDiscardUnderscore(v: PSym): bool = - # template generated underscore symbol name starts with _`gensym - if v.name.s == "_" or v.name.s.startsWith("_`"): + if v.name.s == "_": v.flags.incl(sfGenSym) result = true diff --git a/compiler/semtempl.nim b/compiler/semtempl.nim index 6e824195a9bd..008226c275ea 100644 --- a/compiler/semtempl.nim +++ b/compiler/semtempl.nim @@ -227,7 +227,7 @@ proc addLocalDecl(c: var TemplCtx, n: var PNode, k: TSymKind) = closeScope(c) let ident = getIdentNode(c, n) if not isTemplParam(c, ident): - if n.kind != nkSym: + if n.kind != nkSym and not (n.kind == nkIdent and n.ident.s == "_"): let local = newGenSym(k, ident, c) addPrelimDecl(c.c, local) styleCheckDef(c.c, n.info, local) diff --git a/tests/template/tunderscore1.nim b/tests/template/tunderscore1.nim new file mode 100644 index 000000000000..71af39501e95 --- /dev/null +++ b/tests/template/tunderscore1.nim @@ -0,0 +1,11 @@ +discard """ + errormsg: "undeclared identifier: '_'" +""" + +# issue #12094, #13804 + +template foo = + let _ = 1 + echo _ + +foo()