fix #19700 Crash when passing a template to a generic functio… (#20567)

fix nim-lang#19700 Crash when passing a template to a generic function expecting a procedure
This commit is contained in:
Bung 2022-10-15 13:15:58 +08:00 • committed by GitHub
commit 0510a2be0d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 0 deletions

View file

@ -2131,6 +2131,8 @@ proc paramTypesMatchAux(m: var TCandidate, f, a: PType,
result = c.semInferredLambda(c, m.bindings, arg) result = c.semInferredLambda(c, m.bindings, arg)
elif arg.kind != nkSym: elif arg.kind != nkSym:
return nil return nil
elif arg.sym.kind in {skMacro, skTemplate}:
return nil
else: else:
let inferred = c.semGenerateInstance(c, arg.sym, m.bindings, arg.info) let inferred = c.semGenerateInstance(c, arg.sym, m.bindings, arg.info)
result = newSymNode(inferred, arg.info) result = newSymNode(inferred, arg.info)

10
tests/template/t19700.nim Normal file
View file

@ -0,0 +1,10 @@
discard """
errormsg: "type mismatch: got <Obj, Obj, template (x: untyped, y: untyped): untyped>"
"""
type Obj = object
proc apply[T, R](a, b: T; f: proc(x, y: T): R): R = f(a, b)
let a, b = Obj()
discard apply(a, b, `!=`)