diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim index 5f33df5c7d1a8..cc16fd3c0eb69 100644 --- a/compiler/semtypes.nim +++ b/compiler/semtypes.nim @@ -1671,6 +1671,11 @@ proc semGeneric(c: PContext, n: PNode, s: PSym, prev: PType): PType = var err = "cannot instantiate " err.addTypeHeader(c.config, t) err.add "\ngot: <$1>\nbut expected: <$2>" % [describeArgs(c, n), describeArgs(c, t.n, 0)] + if m.firstMismatch.kind == kTypeMismatch and m.firstMismatch.arg < n.len: + let nArg = n[m.firstMismatch.arg] + if nArg.kind in nkSymChoices: + err.add "\n" + err.add ambiguousIdentifierMsg(nArg) localError(c.config, n.info, errGenerated, err) return newOrPrevType(tyError, prev, c) diff --git a/tests/errmsgs/tambtypegeneric.nim b/tests/errmsgs/tambtypegeneric.nim new file mode 100644 index 0000000000000..ed42ff6cf96b0 --- /dev/null +++ b/tests/errmsgs/tambtypegeneric.nim @@ -0,0 +1,11 @@ +import "."/[mambtype1, mambtype2] +type H[K] = object +proc b(_: int) = # slightly different, still not useful, error message if `b` generic + proc r(): H[Y] = discard #[tt.Error + ^ cannot instantiate H [type declared in tambtypegeneric.nim(2, 6)] +got: <typedesc[Y] | typedesc[Y]> +but expected: <K> +ambiguous identifier: 'Y' -- use one of the following: + mambtype1.Y: Y + mambtype2.Y: Y]# +b(0)