From e69d8ec416f9be8004a7ef37a3cf44edf8258585 Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Fri, 7 Sep 2018 21:06:30 +0200 Subject: [PATCH] Fix type comparison in semConv (#8907) Fixes #8905 --- compiler/semexprs.nim | 3 ++- tests/typerel/t8905.nim | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 tests/typerel/t8905.nim diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index ce953f17c7..e527b06cc1 100644 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -113,6 +113,7 @@ proc checkConvertible(c: PContext, castDest, src: PType): TConvStatus = if castDest.kind notin IntegralTypes+{tyRange}: result = convNotNeedeed return + # Save for later var d = skipTypes(castDest, abstractVar) var s = src if s.kind in tyUserTypeClasses and s.isResolvedUserTypeClass: @@ -135,7 +136,7 @@ proc checkConvertible(c: PContext, castDest, src: PType): TConvStatus = # we use d, s here to speed up that operation a bit: case cmpTypes(c, d, s) of isNone, isGeneric: - if not compareTypes(castDest, src, dcEqIgnoreDistinct): + if not compareTypes(castDest.skipTypes(abstractVar), src, dcEqIgnoreDistinct): result = convNotLegal else: discard diff --git a/tests/typerel/t8905.nim b/tests/typerel/t8905.nim new file mode 100644 index 0000000000..9383962cf6 --- /dev/null +++ b/tests/typerel/t8905.nim @@ -0,0 +1,7 @@ +type + Foo[T] = distinct seq[T] + Bar[T] = object + +proc newFoo[T](): Foo[T] = Foo[T](newSeq[T]()) + +var x = newFoo[Bar[int]]()