From 00c48612083a3ee3b54b61b40e277995fcd59323 Mon Sep 17 00:00:00 2001 From: Andreas Rumpf Date: Fri, 4 Mar 2016 22:18:58 +0100 Subject: [PATCH] fixes #3836 --- compiler/sigmatch.nim | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index e67942cb26..8859c30e44 100644 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -1589,8 +1589,11 @@ proc matchesAux(c: PContext, n, nOrig: PNode, m.state = csNoMatch return if containsOrIncl(marker, formal.position): - # already in namedParams: - localError(n.sons[a].info, errCannotBindXTwice, formal.name.s) + # already in namedParams, so no match + # we used to produce 'errCannotBindXTwice' here but see + # bug #3836 of why that is not sound (other overload with + # different parameter names could match later on): + when false: localError(n.sons[a].info, errCannotBindXTwice, formal.name.s) m.state = csNoMatch return m.baseTypeMatch = false @@ -1647,8 +1650,8 @@ proc matchesAux(c: PContext, n, nOrig: PNode, return formal = m.callee.n.sons[f].sym if containsOrIncl(marker, formal.position) and container.isNil: - # already in namedParams: - localError(n.sons[a].info, errCannotBindXTwice, formal.name.s) + # already in namedParams: (see above remark) + when false: localError(n.sons[a].info, errCannotBindXTwice, formal.name.s) m.state = csNoMatch return m.baseTypeMatch = false