diff options
-rw-r--r-- | compiler/sigmatch.nim | 8 | ||||
-rw-r--r-- | tests/errmsgs/t4756.nim | 16 |
2 files changed, 22 insertions, 2 deletions
diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index bc9888df9..ae7be3c6d 100644 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -1086,8 +1086,12 @@ proc typeRel(c: var TCandidate, f, aOrig: PType, doBind = true): TTypeRelation = of tyBuiltInTypeClass: considerPreviousT: let targetKind = f.sons[0].kind - if targetKind == a.skipTypes({tyRange, tyGenericInst, tyBuiltInTypeClass, tyAlias}).kind or - (targetKind in {tyProc, tyPointer} and a.kind == tyNil): + let effectiveArgType = a.skipTypes({tyRange, tyGenericInst, + tyBuiltInTypeClass, tyAlias}) + let typeClassMatches = targetKind == effectiveArgType.kind and + not effectiveArgType.isEmptyContainer + if typeClassMatches or + (targetKind in {tyProc, tyPointer} and effectiveArgType.kind == tyNil): put(c, f, a) return isGeneric else: diff --git a/tests/errmsgs/t4756.nim b/tests/errmsgs/t4756.nim new file mode 100644 index 000000000..91fc90f4b --- /dev/null +++ b/tests/errmsgs/t4756.nim @@ -0,0 +1,16 @@ +discard """ +errormsg: "type mismatch: got (string, arr: seq[empty])" +line: 15 +""" + +# https://github.com/nim-lang/Nim/issues/4756 + +type + Test* = ref object + name*: string + +proc newTest(name: string, arr: seq): Test = + result = Test(name: name) + +let test = newTest("test", arr = @[]) + |