From 2b6c505b7b8038146e267c56777081459ccdbfad Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Oct 2022 10:18:43 +0800 Subject: [PATCH] fix #19426 compile error using when/elif/else and typedesc in template --- compiler/semfold.nim | 1 + tests/whenstmt/t19426.nim | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 tests/whenstmt/t19426.nim diff --git a/compiler/semfold.nim b/compiler/semfold.nim index 94e5fda314eb..9e45e3b2d274 100644 --- a/compiler/semfold.nim +++ b/compiler/semfold.nim @@ -457,6 +457,7 @@ proc foldArrayAccess(m: PSym, n: PNode; idgen: IdGenerator; g: ModuleGraph): PNo proc foldFieldAccess(m: PSym, n: PNode; idgen: IdGenerator; g: ModuleGraph): PNode = # a real field access; proc calls have already been transformed + if n[1].kind != nkSym: return nil var x = getConstExpr(m, n[0], idgen, g) if x == nil or x.kind notin {nkObjConstr, nkPar, nkTupleConstr}: return diff --git a/tests/whenstmt/t19426.nim b/tests/whenstmt/t19426.nim new file mode 100644 index 000000000000..95fb54a9e45c --- /dev/null +++ b/tests/whenstmt/t19426.nim @@ -0,0 +1,16 @@ +type + MyInt = object + bitWidth: int + +template toRealType*(t: MyInt): typedesc = + when t.bitWidth == 32: int32 + elif t.bitWidth == 64: int64 + else: {.error.} + +proc doFail(T: typedesc): T = default(T) + +proc test = + const myInt = MyInt(bitWidth:32) + discard doFail(toRealType(myInt)) + +test() \ No newline at end of file