nim-lang / Nim

Nim is a statically typed compiled systems programming language. It combines successful concepts from mature languages like Python, Ada and Modula. Its design focuses on efficiency, expressiveness, and elegance (in that order of priority).
https://nim-lang.org
Other
16.22k stars 1.46k forks source link

Using another parameter as default value to a template parameter cause internal error #23506

Open demotomohiro opened 2 months ago

demotomohiro commented 2 months ago

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: 549ef24f35213302ba66e9e786c18ab9146940ee 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

juancarlospaco commented 2 months ago

!nim c

template foo(x: int; y = x) =
  echo x, y

foo(1)
github-actions[bot] commented 2 months ago
:penguin: Linux bisect by @juancarlospaco (collaborator)
devel :-1: 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 filesize 0 bytes (0 bytes) ```cpp ```

Stats

  • Started 2024-04-16T15:07:35
  • Finished 2024-04-16T15:07:35
  • Duration

AST

```nim 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 :-1: 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 filesize 0 bytes (0 bytes) ```cpp ```

Stats

  • Started 2024-04-16T15:07:36
  • Finished 2024-04-16T15:07:36
  • Duration

AST

```nim 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 :-1: 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 filesize 0 bytes (0 bytes) ```cpp ```

Stats

  • Started 2024-04-16T15:07:39
  • Finished 2024-04-16T15:07:39
  • Duration

AST

```nim 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 :-1: 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 filesize 0 bytes (0 bytes) ```cpp ```

Stats

  • Started 2024-04-16T15:07:42
  • Finished 2024-04-16T15:07:42
  • Duration

AST

```nim 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 :-1: 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 ', see https://nim-lang.github.io/Nim/intern.html#debugging-the-compiler for details ```

IR

Compiled filesize 0 bytes (0 bytes) ```cpp ```

Stats

  • Started 2024-04-16T15:07:45
  • Finished 2024-04-16T15:07:45
  • Duration

AST

```nim 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 :-1: 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 ```

IR

Compiled filesize 0 bytes (0 bytes) ```cpp ```

Stats

  • Started 2024-04-16T15:07:47
  • Finished 2024-04-16T15:07:47
  • Duration

AST

```nim 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 :-1: 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 ```

IR

Compiled filesize 0 bytes (0 bytes) ```cpp ```

Stats

  • Started 2024-04-16T15:07:50
  • Finished 2024-04-16T15:07:50
  • Duration

AST

```nim 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

:robot: Bug found in 19 minutes bisecting 7 commits at 0 commits per second