Using another parameter as default value to a template parameter cause internal error
demotomohiro opened this issue Β· comments
Tomohiro commented
Description
Defining a template with a parameter with a default value that is another parameter cause internal error.
Example code:
template foo(x: int; y = x) =
echo x, y
foo(1)
Nim Version
Nim Compiler Version 2.1.1 [Linux: amd64]
Compiled at 2024-04-16
Copyright (c) 2006-2024 by Andreas Rumpf
git hash: 549ef24
active boot switches: -d:release
Current Output
templatedefparam.nim(1, 26) Error: internal error: expr: param not init x_536870914
No stack traceback available
To create a stacktrace, rerun compilation with './koch temp c <file>', see https://nim-lang.github.io/Nim/intern.html#debugging-the-compiler for details
Expected Output
Compiles or show better compile error message.
Possible Solution
No response
Additional Information
No response
Juan Carlos commented
!nim c
template foo(x: int; y = x) =
echo x, y
foo(1)
github-actions commented
π§ Linux bisect by @juancarlospaco (collaborator)
devel π FAIL
Output
Error: Command failed: nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim(1, 26) Error: internal error: expr: param not init x_520093698
assertions.nim(34) raiseAssert
Error: unhandled exception: errInternal [AssertionDefect]
IR
Compiled filesize0 bytes (0 bytes)
Stats
- Started
2024-04-16T15:07:35
- Finished
2024-04-16T15:07:35
- Duration
AST
nnkStmtList.newTree(
nnkTemplateDef.newTree(
newIdentNode("foo"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("int"),
newEmptyNode()
),
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
newIdentNode("x")
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkCommand.newTree(
newIdentNode("echo"),
newIdentNode("x"),
newIdentNode("y")
)
)
),
nnkCall.newTree(
newIdentNode("foo"),
newLit(1)
)
)
stable π FAIL
Output
Error: Command failed: nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim(1, 26) Error: internal error: expr: param not init x_520093698
assertions.nim(34) raiseAssert
Error: unhandled exception: options.nim(681, 5) `false` errInternal [AssertionDefect]
IR
Compiled filesize0 bytes (0 bytes)
Stats
- Started
2024-04-16T15:07:36
- Finished
2024-04-16T15:07:36
- Duration
AST
nnkStmtList.newTree(
nnkTemplateDef.newTree(
newIdentNode("foo"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("int"),
newEmptyNode()
),
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
newIdentNode("x")
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkCommand.newTree(
newIdentNode("echo"),
newIdentNode("x"),
newIdentNode("y")
)
)
),
nnkCall.newTree(
newIdentNode("foo"),
newLit(1)
)
)
2.0.2 π FAIL
Output
Error: Command failed: nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim(1, 26) Error: internal error: expr: param not init x_520093698
assertions.nim(34) raiseAssert
Error: unhandled exception: options.nim(681, 5) `false` errInternal [AssertionDefect]
IR
Compiled filesize0 bytes (0 bytes)
Stats
- Started
2024-04-16T15:07:39
- Finished
2024-04-16T15:07:39
- Duration
AST
nnkStmtList.newTree(
nnkTemplateDef.newTree(
newIdentNode("foo"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("int"),
newEmptyNode()
),
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
newIdentNode("x")
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkCommand.newTree(
newIdentNode("echo"),
newIdentNode("x"),
newIdentNode("y")
)
)
),
nnkCall.newTree(
newIdentNode("foo"),
newLit(1)
)
)
1.6.14 π FAIL
Output
Error: Command failed: nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim(1, 26) Error: internal error: expr: param not init x_452984834
fatal.nim(54) sysFatal
Error: unhandled exception: options.nim(645, 14) `false` errInternal [AssertionDefect]
IR
Compiled filesize0 bytes (0 bytes)
Stats
- Started
2024-04-16T15:07:42
- Finished
2024-04-16T15:07:42
- Duration
AST
nnkStmtList.newTree(
nnkTemplateDef.newTree(
newIdentNode("foo"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("int"),
newEmptyNode()
),
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
newIdentNode("x")
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkCommand.newTree(
newIdentNode("echo"),
newIdentNode("x"),
newIdentNode("y")
)
)
),
nnkCall.newTree(
newIdentNode("foo"),
newLit(1)
)
)
1.4.8 π FAIL
Output
Error: Command failed: nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim(1, 26) Error: internal error: expr: param not init x_4612004
No stack traceback available
To create a stacktrace, rerun compilation with './koch temp c <file>', see https://nim-lang.github.io/Nim/intern.html#debugging-the-compiler for details
IR
Compiled filesize0 bytes (0 bytes)
Stats
- Started
2024-04-16T15:07:45
- Finished
2024-04-16T15:07:45
- Duration
AST
nnkStmtList.newTree(
nnkTemplateDef.newTree(
newIdentNode("foo"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("int"),
newEmptyNode()
),
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
newIdentNode("x")
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkCommand.newTree(
newIdentNode("echo"),
newIdentNode("x"),
newIdentNode("y")
)
)
),
nnkCall.newTree(
newIdentNode("foo"),
newLit(1)
)
)
1.2.18 π FAIL
Output
Error: Command failed: nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim(1, 26) Error: internal error: expr: param not init x_3387005
No stack traceback available
To create a stacktrace, rerun compilation with ./koch temp c <file>
IR
Compiled filesize0 bytes (0 bytes)
Stats
- Started
2024-04-16T15:07:47
- Finished
2024-04-16T15:07:47
- Duration
AST
nnkStmtList.newTree(
nnkTemplateDef.newTree(
newIdentNode("foo"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("int"),
newEmptyNode()
),
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
newIdentNode("x")
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkCommand.newTree(
newIdentNode("echo"),
newIdentNode("x"),
newIdentNode("y")
)
)
),
nnkCall.newTree(
newIdentNode("foo"),
newLit(1)
)
)
1.0.10 π FAIL
Output
Error: Command failed: nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim(1, 26) Error: internal error: expr: param not init x_133005
No stack traceback available
To create a stacktrace, rerun compilation with ./koch temp c <file>
IR
Compiled filesize0 bytes (0 bytes)
Stats
- Started
2024-04-16T15:07:50
- Finished
2024-04-16T15:07:50
- Duration
AST
nnkStmtList.newTree(
nnkTemplateDef.newTree(
newIdentNode("foo"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("int"),
newEmptyNode()
),
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
newIdentNode("x")
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkCommand.newTree(
newIdentNode("echo"),
newIdentNode("x"),
newIdentNode("y")
)
)
),
nnkCall.newTree(
newIdentNode("foo"),
newLit(1)
)
)
Stats
- GCC
11.4.0
- Clang
14.0.0
- NodeJS
20.2
- Created
2024-04-16T15:07:04Z
- Comments
1
- Commands
nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
π€ Bug found in 19 minutes
bisecting 7
commits at 0
commits per second