From ac0f9860081ce20cd1ce1f823db7361ad284b1be Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Mon, 11 Jun 2018 23:19:00 +0200 Subject: [PATCH] Correct field lookup in concept types Fixes #6770 --- compiler/ccgexprs.nim | 2 +- tests/concepts/t6770.nim | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 tests/concepts/t6770.nim diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index bcfee0aabd..b5dcc76e52 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -828,7 +828,7 @@ proc genCheckedRecordField(p: BProc, e: PNode, d: var TLoc) = if optFieldCheck in p.options: var a: TLoc genRecordFieldAux(p, e.sons[0], d, a) - let ty = skipTypes(a.t, abstractInst) + let ty = skipTypes(a.t, abstractInst + tyUserTypeClasses) var r = rdLoc(a) let f = e.sons[0].sons[1].sym let field = lookupFieldAgain(p, ty, f, r) diff --git a/tests/concepts/t6770.nim b/tests/concepts/t6770.nim new file mode 100644 index 0000000000..1787ee670b --- /dev/null +++ b/tests/concepts/t6770.nim @@ -0,0 +1,27 @@ +discard """ +output: ''' +10 +10 +''' +""" + +type GA = concept c + c.a is int + +type A = object + a: int + +type AA = object + case exists: bool + of true: + a: int + else: + discard + +proc print(inp: GA) = + echo inp.a + +let failing = AA(exists: true, a: 10) +let working = A(a:10) +print(working) +print(failing)