diff --git a/compiler/semmagic.nim b/compiler/semmagic.nim index 7c75d86245..47ade51914 100644 --- a/compiler/semmagic.nim +++ b/compiler/semmagic.nim @@ -93,9 +93,10 @@ proc semInstantiationInfo(c: PContext, n: PNode): PNode = line.intVal = toLinenumber(info) var column = newNodeIT(nkIntLit, n.info, getSysType(c.graph, n.info, tyInt)) column.intVal = toColumn(info) - result.add(filename) - result.add(line) - result.add(column) + # filename: string, line: int, column: int + result.add(newTree(nkExprColonExpr, n.typ.n[0], filename)) + result.add(newTree(nkExprColonExpr, n.typ.n[1], line)) + result.add(newTree(nkExprColonExpr, n.typ.n[2], column)) proc toNode(t: PType, i: TLineInfo): PNode = result = newNodeIT(nkType, i, t) diff --git a/tests/template/tgensym_instantiationinfo.nim b/tests/template/tgensym_instantiationinfo.nim new file mode 100644 index 0000000000..305e7e1c3a --- /dev/null +++ b/tests/template/tgensym_instantiationinfo.nim @@ -0,0 +1,24 @@ +discard """ + action: "compile" +""" + +# bug #7937 + +template printError(error: typed) = + # Error: inconsistent typing for reintroduced symbol 'instInfo': previous type was: tuple[filename: string, line: int, column: int]; new type is: tuple of (string, int, int) + let instInfo {.gensym.} = instantiationInfo() + echo "Error at ", instInfo.filename, ':', instInfo.line, ": ", error + +# Removing this overload fixes the error +template someTemplate(someBool: bool, body) = + discard + +template someTemplate(body) = + body + +proc main() = + someTemplate: + printError("ERROR 1") + printError("ERROR 2") + +main()