summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2020-01-04 07:40:02 +0100
committerGitHub <noreply@github.com>2020-01-04 07:40:02 +0100
commit0f6987a86ef6b8bf6839c37c9109dfcc6a4e81af (patch)
treed9ea08bad1bcc119166ff3534a0c346ceb8dcd7f
parent47e7b8771c76deb1eb0827b7613a77b4bbacf019 (diff)
downloadNim-0f6987a86ef6b8bf6839c37c9109dfcc6a4e81af.tar.gz
fixes #12964 (#13027)
-rw-r--r--compiler/sigmatch.nim4
-rw-r--r--tests/destructor/tarc.nim14
2 files changed, 16 insertions, 2 deletions
diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim
index 8b829cec9..469bbf98a 100644
--- a/compiler/sigmatch.nim
+++ b/compiler/sigmatch.nim
@@ -1863,11 +1863,11 @@ proc implicitConv(kind: TNodeKind, f: PType, arg: PNode, m: TCandidate,
   result = newNodeI(kind, arg.info)
   if containsGenericType(f):
     if not m.hasFauxMatch:
-      result.typ = getInstantiatedType(c, arg, m, f)
+      result.typ = getInstantiatedType(c, arg, m, f).skipTypes({tySink})
     else:
       result.typ = errorType(c)
   else:
-    result.typ = f
+    result.typ = f.skipTypes({tySink})
   if result.typ == nil: internalError(c.graph.config, arg.info, "implicitConv")
   result.add c.graph.emptyNode
   result.add arg
diff --git a/tests/destructor/tarc.nim b/tests/destructor/tarc.nim
index 25921ffd7..d5e181630 100644
--- a/tests/destructor/tarc.nim
+++ b/tests/destructor/tarc.nim
@@ -100,4 +100,18 @@ mkManyLeaks()
 tsimpleClosureIterator()
 tleakingNewStmt()
 leakObjConstr()
+
+# bug #12964
+
+type
+  Token* = ref object of RootObj
+  Li* = ref object of Token
+
+proc bug12964*() =
+  var token = Li()
+  var tokens = @[Token()]
+  tokens.add token
+
+bug12964()
+
 echo getOccupiedMem() - startMem