Nim icon indicating copy to clipboard operation
Nim copied to clipboard

Overloaded `template`s across scopes where one has `untyped` parameter fail to build

Open tersec opened this issue 1 year ago • 2 comments

Description

template m(a: uint, p: int) = discard

block:
  template m(x: untyped, i: int) = echo x
  proc j(n: int | int) = m([0][0], 0)
  j(0)

Nim Version

Nim Compiler Version 1.6.21 [Linux: amd64]
Compiled at 2024-06-04
Copyright (c) 2006-2023 by Andreas Rumpf

git hash: 38640664088251bbc88917b4bacfd86ec53014b8
active boot switches: -d:release
Nim Compiler Version 2.0.5 [Linux: amd64]
Compiled at 2024-06-04
Copyright (c) 2006-2023 by Andreas Rumpf

git hash: 7db4376cda8696e51795c8f36e66b99dc5650aa1
active boot switches: -d:release
Nim Compiler Version 2.1.1 [Linux: amd64]
Compiled at 2024-06-04
Copyright (c) 2006-2024 by Andreas Rumpf

git hash: 77c04092e01c7f42b5697ec0ec9e71352f628023
active boot switches: -d:release

Current Output

a.nim(6, 4) template/generic instantiation of `j` from here
a.nim(5, 27) Error: type mismatch
Expression: echo [0][0]
  [1] [0][0]: T

Expected one of (first mismatch at [position]):
[1] proc echo(x: varargs[typed, `$`])

Expected Output

It does not create a misleading error message (if one asks `echo $typeof(x), rather than just echo x, it correctly figures out it should be an int), and builds.

Possible Solution

No response

Additional Information

No response

tersec avatar Jun 04 '24 16:06 tersec

!nim c

template m(a: uint, p: int) = discard

block:
  template m(x: untyped, i: int) = echo x
  proc j(n: int | int) = m([0][0], 0)
  j(0)

juancarlospaco avatar Jun 04 '24 18:06 juancarlospaco

: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(5, 4) template/generic instantiation of `j` from here
/home/runner/work/Nim/Nim/temp.nim(4, 27) Error: type mismatch
Expression: echo [0][0]
  [1] [0][0]: T

Expected one of (first mismatch at [position]):
[1] proc echo(x: varargs[typed, `$`])

assertions.nim(34)       raiseAssert
Error: unhandled exception: errGenerated [AssertionDefect]

IR

Compiled filesize 0 bytes (0 bytes)

Stats

  • Started 2024-06-04T18:34:46
  • Finished 2024-06-04T18:34:46
  • Duration

AST

nnkStmtList.newTree(
  nnkTemplateDef.newTree(
    newIdentNode("m"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("uint"),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("int"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkDiscardStmt.newTree(
        newEmptyNode()
      )
    )
  ),
  nnkBlockStmt.newTree(
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkTemplateDef.newTree(
        newIdentNode("m"),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode(),
          nnkIdentDefs.newTree(
            newIdentNode("x"),
            newIdentNode("untyped"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("i"),
            newIdentNode("int"),
            newEmptyNode()
          )
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkCommand.newTree(
            newIdentNode("echo"),
            newIdentNode("x")
          )
        )
      ),
      nnkProcDef.newTree(
        newIdentNode("j"),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode(),
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            nnkInfix.newTree(
              newIdentNode("|"),
              newIdentNode("int"),
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkCall.newTree(
            newIdentNode("m"),
            nnkBracketExpr.newTree(
              nnkBracket.newTree(
                newLit(0)
              ),
              newLit(0)
            ),
            newLit(0)
          )
        )
      ),
      nnkCall.newTree(
        newIdentNode("j"),
        newLit(0)
      )
    )
  )
)
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(5, 4) template/generic instantiation of `j` from here
/home/runner/work/Nim/Nim/temp.nim(4, 27) Error: type mismatch
Expression: echo [0][0]
  [1] [0][0]: T

Expected one of (first mismatch at [position]):
[1] proc echo(x: varargs[typed, `$`])

assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(681, 5) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 0 bytes (0 bytes)

Stats

  • Started 2024-06-04T18:34:46
  • Finished 2024-06-04T18:34:47
  • Duration

AST

nnkStmtList.newTree(
  nnkTemplateDef.newTree(
    newIdentNode("m"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("uint"),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("int"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkDiscardStmt.newTree(
        newEmptyNode()
      )
    )
  ),
  nnkBlockStmt.newTree(
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkTemplateDef.newTree(
        newIdentNode("m"),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode(),
          nnkIdentDefs.newTree(
            newIdentNode("x"),
            newIdentNode("untyped"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("i"),
            newIdentNode("int"),
            newEmptyNode()
          )
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkCommand.newTree(
            newIdentNode("echo"),
            newIdentNode("x")
          )
        )
      ),
      nnkProcDef.newTree(
        newIdentNode("j"),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode(),
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            nnkInfix.newTree(
              newIdentNode("|"),
              newIdentNode("int"),
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkCall.newTree(
            newIdentNode("m"),
            nnkBracketExpr.newTree(
              nnkBracket.newTree(
                newLit(0)
              ),
              newLit(0)
            ),
            newLit(0)
          )
        )
      ),
      nnkCall.newTree(
        newIdentNode("j"),
        newLit(0)
      )
    )
  )
)
2.0.4 :-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(5, 4) template/generic instantiation of `j` from here
/home/runner/work/Nim/Nim/temp.nim(4, 27) Error: type mismatch
Expression: echo [0][0]
  [1] [0][0]: T

Expected one of (first mismatch at [position]):
[1] proc echo(x: varargs[typed, `$`])

assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(681, 5) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 0 bytes (0 bytes)

Stats

  • Started 2024-06-04T18:34:47
  • Finished 2024-06-04T18:34:47
  • Duration

AST

nnkStmtList.newTree(
  nnkTemplateDef.newTree(
    newIdentNode("m"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("uint"),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("int"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkDiscardStmt.newTree(
        newEmptyNode()
      )
    )
  ),
  nnkBlockStmt.newTree(
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkTemplateDef.newTree(
        newIdentNode("m"),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode(),
          nnkIdentDefs.newTree(
            newIdentNode("x"),
            newIdentNode("untyped"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("i"),
            newIdentNode("int"),
            newEmptyNode()
          )
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkCommand.newTree(
            newIdentNode("echo"),
            newIdentNode("x")
          )
        )
      ),
      nnkProcDef.newTree(
        newIdentNode("j"),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode(),
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            nnkInfix.newTree(
              newIdentNode("|"),
              newIdentNode("int"),
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkCall.newTree(
            newIdentNode("m"),
            nnkBracketExpr.newTree(
              nnkBracket.newTree(
                newLit(0)
              ),
              newLit(0)
            ),
            newLit(0)
          )
        )
      ),
      nnkCall.newTree(
        newIdentNode("j"),
        newLit(0)
      )
    )
  )
)
2.0.0 :-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(5, 4) template/generic instantiation of `j` from here
/home/runner/work/Nim/Nim/temp.nim(4, 27) Error: type mismatch
Expression: echo [0][0]
  [1] [0][0]: T

Expected one of (first mismatch at [position]):
[1] proc echo(x: varargs[typed, `$`])

assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(664, 5) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 0 bytes (0 bytes)

Stats

  • Started 2024-06-04T18:34:51
  • Finished 2024-06-04T18:34:51
  • Duration

AST

nnkStmtList.newTree(
  nnkTemplateDef.newTree(
    newIdentNode("m"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("uint"),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("int"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkDiscardStmt.newTree(
        newEmptyNode()
      )
    )
  ),
  nnkBlockStmt.newTree(
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkTemplateDef.newTree(
        newIdentNode("m"),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode(),
          nnkIdentDefs.newTree(
            newIdentNode("x"),
            newIdentNode("untyped"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("i"),
            newIdentNode("int"),
            newEmptyNode()
          )
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkCommand.newTree(
            newIdentNode("echo"),
            newIdentNode("x")
          )
        )
      ),
      nnkProcDef.newTree(
        newIdentNode("j"),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode(),
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            nnkInfix.newTree(
              newIdentNode("|"),
              newIdentNode("int"),
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkCall.newTree(
            newIdentNode("m"),
            nnkBracketExpr.newTree(
              nnkBracket.newTree(
                newLit(0)
              ),
              newLit(0)
            ),
            newLit(0)
          )
        )
      ),
      nnkCall.newTree(
        newIdentNode("j"),
        newLit(0)
      )
    )
  )
)
1.6.20 :-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(5, 4) template/generic instantiation of `j` from here
/home/runner/work/Nim/Nim/temp.nim(4, 27) Error: type mismatch: got <T>
but expected one of:
proc echo(x: varargs[typed, `$`])
  first type mismatch at position: 1
  required type for x: varargs[typed]
  but expression '[0][0]' is of type: T

expression: echo [0][0]
fatal.nim(54)            sysFatal
Error: unhandled exception: options.nim(662, 14) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 0 bytes (0 bytes)

Stats

  • Started 2024-06-04T18:34:54
  • Finished 2024-06-04T18:34:54
  • Duration

AST

nnkStmtList.newTree(
  nnkTemplateDef.newTree(
    newIdentNode("m"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("uint"),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("int"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkDiscardStmt.newTree(
        newEmptyNode()
      )
    )
  ),
  nnkBlockStmt.newTree(
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkTemplateDef.newTree(
        newIdentNode("m"),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode(),
          nnkIdentDefs.newTree(
            newIdentNode("x"),
            newIdentNode("untyped"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("i"),
            newIdentNode("int"),
            newEmptyNode()
          )
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkCommand.newTree(
            newIdentNode("echo"),
            newIdentNode("x")
          )
        )
      ),
      nnkProcDef.newTree(
        newIdentNode("j"),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode(),
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            nnkInfix.newTree(
              newIdentNode("|"),
              newIdentNode("int"),
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkCall.newTree(
            newIdentNode("m"),
            nnkBracketExpr.newTree(
              nnkBracket.newTree(
                newLit(0)
              ),
              newLit(0)
            ),
            newLit(0)
          )
        )
      ),
      nnkCall.newTree(
        newIdentNode("j"),
        newLit(0)
      )
    )
  )
)
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(5, 4) template/generic instantiation of `j` from here
/home/runner/work/Nim/Nim/temp.nim(4, 27) Error: type mismatch: got <T>
but expected one of: 
proc echo(x: varargs[typed, `$`])
  first type mismatch at position: 1
  required type for x: varargs[typed]
  but expression '[0][0]' is of type: T

expression: echo [0][0]

IR

Compiled filesize 0 bytes (0 bytes)

Stats

  • Started 2024-06-04T18:34:56
  • Finished 2024-06-04T18:34:57
  • Duration

AST

nnkStmtList.newTree(
  nnkTemplateDef.newTree(
    newIdentNode("m"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("uint"),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("int"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkDiscardStmt.newTree(
        newEmptyNode()
      )
    )
  ),
  nnkBlockStmt.newTree(
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkTemplateDef.newTree(
        newIdentNode("m"),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode(),
          nnkIdentDefs.newTree(
            newIdentNode("x"),
            newIdentNode("untyped"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("i"),
            newIdentNode("int"),
            newEmptyNode()
          )
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkCommand.newTree(
            newIdentNode("echo"),
            newIdentNode("x")
          )
        )
      ),
      nnkProcDef.newTree(
        newIdentNode("j"),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode(),
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            nnkInfix.newTree(
              newIdentNode("|"),
              newIdentNode("int"),
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkCall.newTree(
            newIdentNode("m"),
            nnkBracketExpr.newTree(
              nnkBracket.newTree(
                newLit(0)
              ),
              newLit(0)
            ),
            newLit(0)
          )
        )
      ),
      nnkCall.newTree(
        newIdentNode("j"),
        newLit(0)
      )
    )
  )
)
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(5, 4) template/generic instantiation of `j` from here
/home/runner/work/Nim/Nim/temp.nim(4, 27) Error: type mismatch: got <T>
but expected one of: 
proc echo(x: varargs[typed, `$`])
  first type mismatch at position: 1
  required type for x: varargs[typed]
  but expression '[0][0]' is of type: T

expression: echo [0][0]

IR

Compiled filesize 0 bytes (0 bytes)

Stats

  • Started 2024-06-04T18:34:59
  • Finished 2024-06-04T18:34:59
  • Duration

AST

nnkStmtList.newTree(
  nnkTemplateDef.newTree(
    newIdentNode("m"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("uint"),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("int"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkDiscardStmt.newTree(
        newEmptyNode()
      )
    )
  ),
  nnkBlockStmt.newTree(
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkTemplateDef.newTree(
        newIdentNode("m"),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode(),
          nnkIdentDefs.newTree(
            newIdentNode("x"),
            newIdentNode("untyped"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("i"),
            newIdentNode("int"),
            newEmptyNode()
          )
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkCommand.newTree(
            newIdentNode("echo"),
            newIdentNode("x")
          )
        )
      ),
      nnkProcDef.newTree(
        newIdentNode("j"),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode(),
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            nnkInfix.newTree(
              newIdentNode("|"),
              newIdentNode("int"),
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkCall.newTree(
            newIdentNode("m"),
            nnkBracketExpr.newTree(
              nnkBracket.newTree(
                newLit(0)
              ),
              newLit(0)
            ),
            newLit(0)
          )
        )
      ),
      nnkCall.newTree(
        newIdentNode("j"),
        newLit(0)
      )
    )
  )
)
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(5, 4) template/generic instantiation of `j` from here
/home/runner/work/Nim/Nim/temp.nim(4, 27) Error: type mismatch: got <T>
but expected one of: 
proc echo(x: varargs[typed, `$`])
  first type mismatch at position: 1
  required type for x: varargs[typed]
  but expression '[0][0]' is of type: T

expression: echo [0][0]

IR

Compiled filesize 0 bytes (0 bytes)

Stats

  • Started 2024-06-04T18:35:01
  • Finished 2024-06-04T18:35:02
  • Duration

AST

nnkStmtList.newTree(
  nnkTemplateDef.newTree(
    newIdentNode("m"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("uint"),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("int"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkDiscardStmt.newTree(
        newEmptyNode()
      )
    )
  ),
  nnkBlockStmt.newTree(
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkTemplateDef.newTree(
        newIdentNode("m"),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode(),
          nnkIdentDefs.newTree(
            newIdentNode("x"),
            newIdentNode("untyped"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("i"),
            newIdentNode("int"),
            newEmptyNode()
          )
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkCommand.newTree(
            newIdentNode("echo"),
            newIdentNode("x")
          )
        )
      ),
      nnkProcDef.newTree(
        newIdentNode("j"),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode(),
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            nnkInfix.newTree(
              newIdentNode("|"),
              newIdentNode("int"),
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkCall.newTree(
            newIdentNode("m"),
            nnkBracketExpr.newTree(
              nnkBracket.newTree(
                newLit(0)
              ),
              newLit(0)
            ),
            newLit(0)
          )
        )
      ),
      nnkCall.newTree(
        newIdentNode("j"),
        newLit(0)
      )
    )
  )
)
Stats
  • GCC 11.4.0
  • Clang 14.0.0
  • NodeJS 20.3
  • Created 2024-06-04T18:34:14Z
  • 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 8 commits at 0 commits per second

github-actions[bot] avatar Jun 04 '24 18:06 github-actions[bot]