Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
demotomohiro opened this issue Apr 16, 2024 · 2 comments

Comments

@demotomohiro
Copy link
Contributor

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

@juancarlospaco
Copy link
Collaborator

!nim c

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

foo(1)

Copy link
Contributor

🐧 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 filesize 0 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 filesize 0 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 filesize 0 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 filesize 0 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 filesize 0 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 filesize 0 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 filesize 0 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants