summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorLemonBoy <LemonBoy@users.noreply.github.com>2018-09-07 21:06:30 +0200
committerAndreas Rumpf <rumpf_a@web.de>2018-09-07 21:06:30 +0200
commite69d8ec416f9be8004a7ef37a3cf44edf8258585 (patch)
tree281818e7acac247eee1471fd3e7c4ae0d4532022
parent90025e242db1f4b2f2bca186ee77ab1578545f15 (diff)
downloadNim-e69d8ec416f9be8004a7ef37a3cf44edf8258585.tar.gz
Fix type comparison in semConv (#8907)
Fixes #8905
-rw-r--r--compiler/semexprs.nim3
-rw-r--r--tests/typerel/t8905.nim7
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]]()