From c343303efeb063102d33bcb7d214b384f3dcd7df Mon Sep 17 00:00:00 2001 From: Anatoly Galiulin Date: Wed, 29 Nov 2017 07:34:30 +0700 Subject: [PATCH] Fix usage of parameters types in templates #6756 (#6768) --- compiler/evaltempl.nim | 2 +- tests/ccgbugs/t6756.nim | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 tests/ccgbugs/t6756.nim diff --git a/compiler/evaltempl.nim b/compiler/evaltempl.nim index 2c8abdfced..7fa6df3da4 100644 --- a/compiler/evaltempl.nim +++ b/compiler/evaltempl.nim @@ -42,7 +42,7 @@ proc evalTemplateAux(templ, actual: PNode, c: var TemplCtx, result: PNode) = s.kind == skType and s.typ != nil and s.typ.kind == tyGenericParam: handleParam actual.sons[s.owner.typ.len + s.position - 1] else: - internalAssert sfGenSym in s.flags + internalAssert sfGenSym in s.flags or s.kind == skType var x = PSym(idTableGet(c.mapping, s)) if x == nil: x = copySym(s, false) diff --git a/tests/ccgbugs/t6756.nim b/tests/ccgbugs/t6756.nim new file mode 100644 index 0000000000..0f08557ebb --- /dev/null +++ b/tests/ccgbugs/t6756.nim @@ -0,0 +1,18 @@ +import typetraits +type + A[T] = ref object + v: T + +template templ(o: A, op: untyped): untyped = + type T = type(o.v) + + var res: A[T] + + block: + var it {.inject.}: T + it = o.v + res = A[T](v: op) + res + +let a = A[int](v: 1) +echo templ(a, it + 2)[]