From 179d82c55bda199b32a108f4ba474f47a83584c9 Mon Sep 17 00:00:00 2001 From: Adam Strzelecki Date: Wed, 13 May 2015 16:53:39 +0200 Subject: [PATCH] Fix #2662: Don't convert subtype typedesc params There is no point to issue implicit HiddenStdConv encountering subtype of typedesc[Base] parameter on overload resolution, since this will anyway never reach codegen. This change effectively fixes compiler bug for: iterator it(T: typedesc[Base]) = ... for s in it(SubclassOfBase): ... Where HiddenStdConv triggered implicit instantiation of variable of type typedesc[Base] in for transform, that eventually fails at getUniqueType, that refuses to work for typedesc. --- compiler/sigmatch.nim | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index 2a9d15b5a..7ea2c3d6f 100644 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -1281,7 +1281,10 @@ proc paramTypesMatchAux(m: var TCandidate, f, argType: PType, result = implicitConv(nkHiddenStdConv, f, arg, m, c) of isSubtype: inc(m.subtypeMatches) - result = implicitConv(nkHiddenSubConv, f, arg, m, c) + if f.kind == tyTypeDesc: + result = arg + else: + result = implicitConv(nkHiddenSubConv, f, arg, m, c) of isSubrange: inc(m.subtypeMatches) if f.kind == tyVar: