Open shirleyquirk opened 3 years ago
related crash if the template is untyped
when true:
template foo(x:int):untyped = discard #or x, 5, $x, etc
#or template foo(x:untyped):untyped
proc bar(p: proc(x:int):int) = discard
bar(foo)
Result:
Error: internal error: /home/bwsq/.choosenim/toolchains/nim-#devel/compiler/seminst.nim(335, 18)
Traceback (most recent call last)
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/nim.nim(125) nim
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/nim.nim(84) handleCmdLine
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/main.nim(242) mainCommand
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/main.nim(213) compileToBackend
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/main.nim(90) commandCompileToC
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/modules.nim(178) compileProject
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/modules.nim(97) compileModule
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/passes.nim(180) processModule
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/passes.nim(73) processTopLevelStmt
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/sem.nim(626) myProcess
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/sem.nim(594) semStmtAndGenerateGenerics
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/semstmts.nim(2276) semStmt
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/semexprs.nim(1042) semExprNoType
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/semexprs.nim(2892) semExpr
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/semstmts.nim(2218) semStmtList
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/semexprs.nim(2819) semExpr
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/semexprs.nim(2340) semWhen
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/semexprs.nim(2892) semExpr
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/semstmts.nim(2218) semStmtList
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/semexprs.nim(2793) semExpr
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/semexprs.nim(1023) semDirectOp
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/semexprs.nim(859) semOverloadedCallAnalyseEffects
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/semcall.nim(566) semOverloadedCall
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/semcall.nim(360) resolveOverloads
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/semcall.nim(95) pickBestCandidate
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/sigmatch.nim(2536) matches
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/sigmatch.nim(2470) matchesAux
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/sigmatch.nim(2196) paramTypesMatch
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/sigmatch.nim(2109) paramTypesMatchAux
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/msgs.nim(613) generateInstance
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/msgs.nim(600) internalErrorImpl
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/msgs.nim(553) liMessage
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/msgs.nim(415) handleError
/home/bwsq/.choosenim/toolchains/nim-#devel/compiler/msgs.nim(404) quit
FAILURE
For the first case, using static proc
works, and actually calls the template like a regular template.
The second case (template foo(x: int): untyped
) should give a type mismatch error, i.e. "got template (x: int): untyped
, expected proc (x: int): int
". Probably doesn't currently due to behavior related to auto
return types.
passing a typed template(Ts...) or macro(Ts... to a proc(proc(Ts..)) results in a compiler crash
Example
Current Output
Expected Output
probably type error expected proc(T):T{.closure.} got template but extra credit if it accepts template(T):T
i ran into this trying to @[1,2,3].map(initBigInt), had to check source to find out that initBigint is
template initBigInt(x:int):BiggestInt = initBigint(x:int64)
whereinitBigint(x:int64)
is a proc$ nim -v Nim Compiler Version 1.5.1 [Linux: amd64] Compiled at 2021-03-31 Copyright (c) 2006-2021 by Andreas Rumpf
git hash: 7c09e0c75773a2df6469a2acd94f3090aef83255 active boot switches: -d:release