diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2020-01-04 07:40:02 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-04 07:40:02 +0100 |
commit | 0f6987a86ef6b8bf6839c37c9109dfcc6a4e81af (patch) | |
tree | d9ea08bad1bcc119166ff3534a0c346ceb8dcd7f | |
parent | 47e7b8771c76deb1eb0827b7613a77b4bbacf019 (diff) | |
download | Nim-0f6987a86ef6b8bf6839c37c9109dfcc6a4e81af.tar.gz |
fixes #12964 (#13027)
-rw-r--r-- | compiler/sigmatch.nim | 4 | ||||
-rw-r--r-- | tests/destructor/tarc.nim | 14 |
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 |