diff options
author | LemonBoy <LemonBoy@users.noreply.github.com> | 2018-09-07 21:06:30 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2018-09-07 21:06:30 +0200 |
commit | e69d8ec416f9be8004a7ef37a3cf44edf8258585 (patch) | |
tree | 281818e7acac247eee1471fd3e7c4ae0d4532022 | |
parent | 90025e242db1f4b2f2bca186ee77ab1578545f15 (diff) | |
download | Nim-e69d8ec416f9be8004a7ef37a3cf44edf8258585.tar.gz |
Fix type comparison in semConv (#8907)
Fixes #8905
-rw-r--r-- | compiler/semexprs.nim | 3 | ||||
-rw-r--r-- | tests/typerel/t8905.nim | 7 |
2 files changed, 9 insertions, 1 deletions
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index ce953f17c..e527b06cc 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 000000000..9383962cf --- /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]]() |