Nim icon indicating copy to clipboard operation
Nim copied to clipboard

Compiler crash with generics static int, Atomics, range

Open hugosenari opened this issue 2 years ago • 3 comments

Description

Compiler crash with generics static int, Atomics, range

/home/hugosenari/Code/NimCloned/lib/system/fatal.nim(53) sysFatal Error: unhandled exception: field 'intVal' is not accessible for type 'TNode' using 'kind = nkStaticExpr' [FieldDefect]

import std/atomics

type
  R [L: static int] = range[0..L]
  Q [L: static int] = object
    v: Atomic[R[L]]
  
proc f[L: static int](q: Q[L]): void =
  discard

var q: Q[4]
q.f
  

Nim Version

Nim Compiler Version 2.0.0 [Linux: amd64] Compiled at 2023-11-07 Copyright (c) 2006-2023 by Andreas Rumpf

git hash: a488067a4130f029000be4550a0fb1b39e0e9e7c

Current Output

/compiler/nim.nim(164) nim
/home/hugosenari/Code/NimCloned/compiler/nim.nim(119) handleCmdLine
/home/hugosenari/Code/NimCloned/compiler/main.nim(307) mainCommand
/home/hugosenari/Code/NimCloned/compiler/main.nim(276) compileToBackend
/home/hugosenari/Code/NimCloned/compiler/main.nim(138) commandCompileToC
/home/hugosenari/Code/NimCloned/compiler/pipelines.nim(294) compilePipelineProject
/home/hugosenari/Code/NimCloned/compiler/pipelines.nim(224) compilePipelineModule
/home/hugosenari/Code/NimCloned/compiler/pipelines.nim(171) processPipelineModule
/home/hugosenari/Code/NimCloned/compiler/sem.nim(782) semWithPContext
/home/hugosenari/Code/NimCloned/compiler/sem.nim(751) semStmtAndGenerateGenerics
/home/hugosenari/Code/NimCloned/compiler/semstmts.nim(2636) semStmt
/home/hugosenari/Code/NimCloned/compiler/semexprs.nim(1160) semExprNoType
/home/hugosenari/Code/NimCloned/compiler/semexprs.nim(3229) semExpr
/home/hugosenari/Code/NimCloned/lib/system.nim(938) semStmtList
/home/hugosenari/Code/NimCloned/compiler/semexprs.nim(3083) semExpr
/home/hugosenari/Code/NimCloned/compiler/semexprs.nim(3123) semExpr
/home/hugosenari/Code/NimCloned/compiler/semexprs.nim(1141) semDirectOp
/home/hugosenari/Code/NimCloned/compiler/semexprs.nim(964) semOverloadedCallAnalyseEffects
/home/hugosenari/Code/NimCloned/compiler/semcall.nim(620) semOverloadedCall
/home/hugosenari/Code/NimCloned/compiler/semcall.nim(419) resolveOverloads
/home/hugosenari/Code/NimCloned/compiler/semcall.nim(95) pickBestCandidate
/home/hugosenari/Code/NimCloned/compiler/sigmatch.nim(2648) matches
/home/hugosenari/Code/NimCloned/compiler/sigmatch.nim(2582) matchesAux
/home/hugosenari/Code/NimCloned/compiler/sigmatch.nim(2287) paramTypesMatch
/home/hugosenari/Code/NimCloned/compiler/sigmatch.nim(2116) paramTypesMatchAux
/home/hugosenari/Code/NimCloned/compiler/sigmatch.nim(1532) typeRel
/home/hugosenari/Code/NimCloned/compiler/semtypinst.nim(751) prepareMetatypeForSigmatch
/home/hugosenari/Code/NimCloned/compiler/semtypinst.nim(121) replaceTypeVarsT
/home/hugosenari/Code/NimCloned/compiler/semtypinst.nim(557) replaceTypeVarsTAux
/home/hugosenari/Code/NimCloned/compiler/semtypinst.nim(424) handleGenericInvocation
/home/hugosenari/Code/NimCloned/compiler/semtypinst.nim(121) replaceTypeVarsT
/home/hugosenari/Code/NimCloned/compiler/semtypinst.nim(651) replaceTypeVarsTAux
/home/hugosenari/Code/NimCloned/compiler/semtypinst.nim(265) replaceTypeVarsN
/home/hugosenari/Code/NimCloned/compiler/semtypinst.nim(219) replaceTypeVarsN
/home/hugosenari/Code/NimCloned/compiler/semtypinst.nim(121) replaceTypeVarsT
/home/hugosenari/Code/NimCloned/compiler/semtypinst.nim(557) replaceTypeVarsTAux
/home/hugosenari/Code/NimCloned/compiler/semtypinst.nim(424) handleGenericInvocation
/home/hugosenari/Code/NimCloned/compiler/semtypinst.nim(121) replaceTypeVarsT
/home/hugosenari/Code/NimCloned/compiler/semtypinst.nim(651) replaceTypeVarsTAux
/home/hugosenari/Code/NimCloned/compiler/semtypinst.nim(265) replaceTypeVarsN
/home/hugosenari/Code/NimCloned/compiler/semtypinst.nim(240) replaceTypeVarsN
/home/hugosenari/Code/NimCloned/compiler/sem.nim(372) semConstExpr
/home/hugosenari/Code/NimCloned/compiler/semexprs.nim(119) semExprWithType
/home/hugosenari/Code/NimCloned/compiler/semexprs.nim(78) semExprCheck
/home/hugosenari/Code/NimCloned/compiler/semexprs.nim(3124) semExpr
/home/hugosenari/Code/NimCloned/compiler/semexprs.nim(2406) semMagic
/home/hugosenari/Code/NimCloned/compiler/semexprs.nim(557) semIs
/home/hugosenari/Code/NimCloned/compiler/semexprs.nim(510) isOpImpl
/home/hugosenari/Code/NimCloned/compiler/sigmatch.nim(1620) typeRel
/home/hugosenari/Code/NimCloned/compiler/sigmatch.nim(1073) typeRel
/home/hugosenari/Code/NimCloned/compiler/sigmatch.nim(1179) typeRel
/home/hugosenari/Code/NimCloned/compiler/sigmatch.nim(416) handleRange
/home/hugosenari/Code/NimCloned/lib/system/fatal.nim(53) sysFatal
Error: unhandled exception: field 'intVal' is not accessible for type 'TNode' using 'kind = nkStaticExpr' [FieldDefect]

Expected Output

Compiles or Provide a proper error (ie: can't mix static: int and range with)

Possible Solution

No response

Additional Information

No response

hugosenari avatar Nov 08 '23 02:11 hugosenari

!nim c

import std/atomics

type
  R [L: static int] = range[0..L]
  Q [L: static int] = object
    v: Atomic[R[L]]
  
proc f[L: static int](q: Q[L]): void =
  discard

var q: Q[4]
q.f

ringabout avatar Nov 16 '23 12:11 ringabout

:penguin: Linux bisect by @ringabout (member)
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
fatal.nim(53)            sysFatal
Error: unhandled exception: field 'intVal' is not accessible for type 'TNode' using 'kind = nkStaticExpr' [FieldDefect]

IR

Compiled filesize 0 bytes (0 bytes)

Stats

  • Started 2023-11-16T12:34:40
  • Finished 2023-11-16T12:34:40
  • Duration

AST

nnkStmtList.newTree(
  nnkImportStmt.newTree(
    nnkInfix.newTree(
      newIdentNode("/"),
      newIdentNode("std"),
      newIdentNode("atomics")
    )
  ),
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("R"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("L"),
          nnkCommand.newTree(
            newIdentNode("static"),
            newIdentNode("int")
          ),
          newEmptyNode()
        )
      ),
      nnkBracketExpr.newTree(
        newIdentNode("range"),
        nnkInfix.newTree(
          newIdentNode(".."),
          newLit(0),
          newIdentNode("L")
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Q"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("L"),
          nnkCommand.newTree(
            newIdentNode("static"),
            newIdentNode("int")
          ),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("v"),
            nnkBracketExpr.newTree(
              newIdentNode("Atomic"),
              nnkBracketExpr.newTree(
                newIdentNode("R"),
                newIdentNode("L")
              )
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("f"),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("L"),
        nnkCommand.newTree(
          newIdentNode("static"),
          newIdentNode("int")
        ),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("void"),
      nnkIdentDefs.newTree(
        newIdentNode("q"),
        nnkBracketExpr.newTree(
          newIdentNode("Q"),
          newIdentNode("L")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkDiscardStmt.newTree(
        newEmptyNode()
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("q"),
      nnkBracketExpr.newTree(
        newIdentNode("Q"),
        newLit(4)
      ),
      newEmptyNode()
    )
  ),
  nnkDotExpr.newTree(
    newIdentNode("q"),
    newIdentNode("f")
  )
)
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
fatal.nim(53)            sysFatal
Error: unhandled exception: field 'intVal' is not accessible for type 'TNode' using 'kind = nkStaticExpr' [FieldDefect]

IR

Compiled filesize 0 bytes (0 bytes)

Stats

  • Started 2023-11-16T12:34:41
  • Finished 2023-11-16T12:34:41
  • Duration

AST

nnkStmtList.newTree(
  nnkImportStmt.newTree(
    nnkInfix.newTree(
      newIdentNode("/"),
      newIdentNode("std"),
      newIdentNode("atomics")
    )
  ),
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("R"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("L"),
          nnkCommand.newTree(
            newIdentNode("static"),
            newIdentNode("int")
          ),
          newEmptyNode()
        )
      ),
      nnkBracketExpr.newTree(
        newIdentNode("range"),
        nnkInfix.newTree(
          newIdentNode(".."),
          newLit(0),
          newIdentNode("L")
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Q"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("L"),
          nnkCommand.newTree(
            newIdentNode("static"),
            newIdentNode("int")
          ),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("v"),
            nnkBracketExpr.newTree(
              newIdentNode("Atomic"),
              nnkBracketExpr.newTree(
                newIdentNode("R"),
                newIdentNode("L")
              )
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("f"),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("L"),
        nnkCommand.newTree(
          newIdentNode("static"),
          newIdentNode("int")
        ),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("void"),
      nnkIdentDefs.newTree(
        newIdentNode("q"),
        nnkBracketExpr.newTree(
          newIdentNode("Q"),
          newIdentNode("L")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkDiscardStmt.newTree(
        newEmptyNode()
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("q"),
      nnkBracketExpr.newTree(
        newIdentNode("Q"),
        newLit(4)
      ),
      newEmptyNode()
    )
  ),
  nnkDotExpr.newTree(
    newIdentNode("q"),
    newIdentNode("f")
  )
)
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
fatal.nim(53)            sysFatal
Error: unhandled exception: field 'intVal' is not accessible for type 'TNode' using 'kind = nkStaticExpr' [FieldDefect]

IR

Compiled filesize 0 bytes (0 bytes)

Stats

  • Started 2023-11-16T12:34:41
  • Finished 2023-11-16T12:34:41
  • Duration

AST

nnkStmtList.newTree(
  nnkImportStmt.newTree(
    nnkInfix.newTree(
      newIdentNode("/"),
      newIdentNode("std"),
      newIdentNode("atomics")
    )
  ),
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("R"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("L"),
          nnkCommand.newTree(
            newIdentNode("static"),
            newIdentNode("int")
          ),
          newEmptyNode()
        )
      ),
      nnkBracketExpr.newTree(
        newIdentNode("range"),
        nnkInfix.newTree(
          newIdentNode(".."),
          newLit(0),
          newIdentNode("L")
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Q"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("L"),
          nnkCommand.newTree(
            newIdentNode("static"),
            newIdentNode("int")
          ),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("v"),
            nnkBracketExpr.newTree(
              newIdentNode("Atomic"),
              nnkBracketExpr.newTree(
                newIdentNode("R"),
                newIdentNode("L")
              )
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("f"),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("L"),
        nnkCommand.newTree(
          newIdentNode("static"),
          newIdentNode("int")
        ),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("void"),
      nnkIdentDefs.newTree(
        newIdentNode("q"),
        nnkBracketExpr.newTree(
          newIdentNode("Q"),
          newIdentNode("L")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkDiscardStmt.newTree(
        newEmptyNode()
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("q"),
      nnkBracketExpr.newTree(
        newIdentNode("Q"),
        newLit(4)
      ),
      newEmptyNode()
    )
  ),
  nnkDotExpr.newTree(
    newIdentNode("q"),
    newIdentNode("f")
  )
)
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
fatal.nim(54)            sysFatal
Error: unhandled exception: field 'intVal' is not accessible for type 'TNode' using 'kind = nkStaticExpr' [FieldDefect]

IR

Compiled filesize 0 bytes (0 bytes)

Stats

  • Started 2023-11-16T12:34:44
  • Finished 2023-11-16T12:34:44
  • Duration

AST

nnkStmtList.newTree(
  nnkImportStmt.newTree(
    nnkInfix.newTree(
      newIdentNode("/"),
      newIdentNode("std"),
      newIdentNode("atomics")
    )
  ),
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("R"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("L"),
          nnkCommand.newTree(
            newIdentNode("static"),
            newIdentNode("int")
          ),
          newEmptyNode()
        )
      ),
      nnkBracketExpr.newTree(
        newIdentNode("range"),
        nnkInfix.newTree(
          newIdentNode(".."),
          newLit(0),
          newIdentNode("L")
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Q"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("L"),
          nnkCommand.newTree(
            newIdentNode("static"),
            newIdentNode("int")
          ),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("v"),
            nnkBracketExpr.newTree(
              newIdentNode("Atomic"),
              nnkBracketExpr.newTree(
                newIdentNode("R"),
                newIdentNode("L")
              )
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("f"),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("L"),
        nnkCommand.newTree(
          newIdentNode("static"),
          newIdentNode("int")
        ),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("void"),
      nnkIdentDefs.newTree(
        newIdentNode("q"),
        nnkBracketExpr.newTree(
          newIdentNode("Q"),
          newIdentNode("L")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkDiscardStmt.newTree(
        newEmptyNode()
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("q"),
      nnkBracketExpr.newTree(
        newIdentNode("Q"),
        newLit(4)
      ),
      newEmptyNode()
    )
  ),
  nnkDotExpr.newTree(
    newIdentNode("q"),
    newIdentNode("f")
  )
)
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
fatal.nim(49)            sysFatal
Error: unhandled exception: 'intVal' is not accessible using discriminant 'kind' of type 'TNode' [FieldDefect]

IR

Compiled filesize 0 bytes (0 bytes)

Stats

  • Started 2023-11-16T12:34:47
  • Finished 2023-11-16T12:34:47
  • Duration

AST

nnkStmtList.newTree(
  nnkImportStmt.newTree(
    nnkInfix.newTree(
      newIdentNode("/"),
      newIdentNode("std"),
      newIdentNode("atomics")
    )
  ),
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("R"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("L"),
          nnkCommand.newTree(
            newIdentNode("static"),
            newIdentNode("int")
          ),
          newEmptyNode()
        )
      ),
      nnkBracketExpr.newTree(
        newIdentNode("range"),
        nnkInfix.newTree(
          newIdentNode(".."),
          newLit(0),
          newIdentNode("L")
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Q"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("L"),
          nnkCommand.newTree(
            newIdentNode("static"),
            newIdentNode("int")
          ),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("v"),
            nnkBracketExpr.newTree(
              newIdentNode("Atomic"),
              nnkBracketExpr.newTree(
                newIdentNode("R"),
                newIdentNode("L")
              )
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("f"),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("L"),
        nnkCommand.newTree(
          newIdentNode("static"),
          newIdentNode("int")
        ),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("void"),
      nnkIdentDefs.newTree(
        newIdentNode("q"),
        nnkBracketExpr.newTree(
          newIdentNode("Q"),
          newIdentNode("L")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkDiscardStmt.newTree(
        newEmptyNode()
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("q"),
      nnkBracketExpr.newTree(
        newIdentNode("Q"),
        newLit(4)
      ),
      newEmptyNode()
    )
  ),
  nnkDotExpr.newTree(
    newIdentNode("q"),
    newIdentNode("f")
  )
)
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
fatal.nim(49)            sysFatal
Error: unhandled exception: 'intVal' is not accessible using discriminant 'kind' of type 'TNode' [FieldError]

IR

Compiled filesize 0 bytes (0 bytes)

Stats

  • Started 2023-11-16T12:34:49
  • Finished 2023-11-16T12:34:49
  • Duration

AST

nnkStmtList.newTree(
  nnkImportStmt.newTree(
    nnkInfix.newTree(
      newIdentNode("/"),
      newIdentNode("std"),
      newIdentNode("atomics")
    )
  ),
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("R"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("L"),
          nnkCommand.newTree(
            newIdentNode("static"),
            newIdentNode("int")
          ),
          newEmptyNode()
        )
      ),
      nnkBracketExpr.newTree(
        newIdentNode("range"),
        nnkInfix.newTree(
          newIdentNode(".."),
          newLit(0),
          newIdentNode("L")
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Q"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("L"),
          nnkCommand.newTree(
            newIdentNode("static"),
            newIdentNode("int")
          ),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("v"),
            nnkBracketExpr.newTree(
              newIdentNode("Atomic"),
              nnkBracketExpr.newTree(
                newIdentNode("R"),
                newIdentNode("L")
              )
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("f"),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("L"),
        nnkCommand.newTree(
          newIdentNode("static"),
          newIdentNode("int")
        ),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("void"),
      nnkIdentDefs.newTree(
        newIdentNode("q"),
        nnkBracketExpr.newTree(
          newIdentNode("Q"),
          newIdentNode("L")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkDiscardStmt.newTree(
        newEmptyNode()
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("q"),
      nnkBracketExpr.newTree(
        newIdentNode("Q"),
        newLit(4)
      ),
      newEmptyNode()
    )
  ),
  nnkDotExpr.newTree(
    newIdentNode("q"),
    newIdentNode("f")
  )
)
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
fatal.nim(39)            sysFatal
Error: unhandled exception: 'intVal' is not accessible using discriminant 'kind' of type 'TNode' [FieldError]

IR

Compiled filesize 0 bytes (0 bytes)

Stats

  • Started 2023-11-16T12:34:51
  • Finished 2023-11-16T12:34:51
  • Duration

AST

nnkStmtList.newTree(
  nnkImportStmt.newTree(
    nnkInfix.newTree(
      newIdentNode("/"),
      newIdentNode("std"),
      newIdentNode("atomics")
    )
  ),
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("R"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("L"),
          nnkCommand.newTree(
            newIdentNode("static"),
            newIdentNode("int")
          ),
          newEmptyNode()
        )
      ),
      nnkBracketExpr.newTree(
        newIdentNode("range"),
        nnkInfix.newTree(
          newIdentNode(".."),
          newLit(0),
          newIdentNode("L")
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Q"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("L"),
          nnkCommand.newTree(
            newIdentNode("static"),
            newIdentNode("int")
          ),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("v"),
            nnkBracketExpr.newTree(
              newIdentNode("Atomic"),
              nnkBracketExpr.newTree(
                newIdentNode("R"),
                newIdentNode("L")
              )
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("f"),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("L"),
        nnkCommand.newTree(
          newIdentNode("static"),
          newIdentNode("int")
        ),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("void"),
      nnkIdentDefs.newTree(
        newIdentNode("q"),
        nnkBracketExpr.newTree(
          newIdentNode("Q"),
          newIdentNode("L")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkDiscardStmt.newTree(
        newEmptyNode()
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("q"),
      nnkBracketExpr.newTree(
        newIdentNode("Q"),
        newLit(4)
      ),
      newEmptyNode()
    )
  ),
  nnkDotExpr.newTree(
    newIdentNode("q"),
    newIdentNode("f")
  )
)
Stats
  • GCC 11.4.0
  • Clang 14.0.0
  • NodeJS 18.2
  • Created 2023-11-16T12:34:15Z
  • 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 14 minutes bisecting 7 commits at 0 commits per second

github-actions[bot] avatar Nov 16 '23 12:11 github-actions[bot]

The nkStaticExpr does not get properly instantiated during overload resolution because of cl.allowMetaTypes, after #24098 or #24086 this code could be changed to unconditionally semExpr

metagn avatar Oct 14 '24 08:10 metagn