diff --git a/compiler/semcall.nim b/compiler/semcall.nim index 90376214db..e3c6ea851b 100644 --- a/compiler/semcall.nim +++ b/compiler/semcall.nim @@ -688,7 +688,9 @@ proc instGenericConvertersArg*(c: PContext, a: PNode, x: TCandidate) = if s.isGenericRoutineStrict: var src = s.typ.firstParamType var convMatch = newCandidate(c, src) - let srca = typeRel(convMatch, src, a[1].typ) + var arg = a[1] + if arg.kind in {nkHiddenAddr, nkHiddenSubConv}: arg = arg[^1] + let srca = typeRel(convMatch, src, arg.typ) if srca notin {isEqual, isGeneric, isSubtype}: internalError(c.config, a.info, "generic converter failed rematch") let finalCallee = generateInstance(c, s, convMatch.bindings, a.info) diff --git a/tests/converter/tvargenericconverter.nim b/tests/converter/tvargenericconverter.nim new file mode 100644 index 0000000000..f88779d9d8 --- /dev/null +++ b/tests/converter/tvargenericconverter.nim @@ -0,0 +1,7 @@ +# regression test + +converter toPtr[T](x: var T): ptr T = + result = addr x + +var x = 123 +let y: ptr int = x