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

Type with generic static value can't be used before value type declaration #21482

Open
lchenut opened this issue Mar 6, 2023 · 2 comments
Open

Comments

@lchenut
Copy link

lchenut commented Mar 6, 2023

Description

type
  PBOption[defaultValue: static[auto]] = object
    some: bool
    value: typeof(defaultValue)

  Type1* = object
    a: PBOption[default(ref Type2)]

  Type2* = object
    a: PBOption[default(ref Type1)]

Nim Version

Nim Compiler Version 1.6.10 [Linux: amd64]
Compiled at 2022-11-21
Copyright (c) 2006-2021 by Andreas Rumpf

git hash: f151925
active boot switches: -d:release

Current Output

/tmp/test.nim(7, 24) template/generic instantiation of `default` from here
/home/lchenut/.choosenim/toolchains/nim-1.6.10/lib/system.nim(982, 17) Error: invalid type: 'Type2' in this context: 'proc (_: typedesc[ref Type2]): ref Type2{.noSideEffect, gcsafe, locks: 0.}' for proc

Expected Output

Compiles

Possible Solution

No response

Additional Information

No response

@github-actions github-actions bot added the stale Staled PR/issues; remove the label after fixing them label Jun 1, 2023
@ringabout ringabout removed the stale Staled PR/issues; remove the label after fixing them label Jun 9, 2023
@juancarlospaco
Copy link
Collaborator

!nim c

type
  X[o: static[auto]] = object
    v: typeof(o)
  Y = object
    a: X[default(ref Z)]
  Z = object
    b: X[default(ref Y)]

@github-actions
Copy link
Contributor

github-actions bot commented Jul 7, 2023

@juancarlospaco (contributor)

devel :-1: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings: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, 17) template/generic instantiation of `default` from here
/home/runner/.choosenim/toolchains/nim-#devel/lib/system.nim(922, 17) Error: invalid type: 'Z' in this context: 'proc (_: typedesc[ref Z]): ref Z{.noSideEffect, gcsafe.}' for proc

Stats

  • Created 2023-07-07T02:37:01Z
  • Started 2023-07-07T02:37:34
  • Finished 2023-07-07T02:37:35
  • Duration now
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("X"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("o"),
          nnkBracketExpr.newTree(
            newIdentNode("static"),
            newIdentNode("auto")
          ),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("v"),
            nnkCall.newTree(
              newIdentNode("typeof"),
              newIdentNode("o")
            ),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Y"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("a"),
            nnkBracketExpr.newTree(
              newIdentNode("X"),
              nnkCall.newTree(
                newIdentNode("default"),
                nnkRefTy.newTree(
                  newIdentNode("Z")
                )
              )
            ),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Z"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("b"),
            nnkBracketExpr.newTree(
              newIdentNode("X"),
              nnkCall.newTree(
                newIdentNode("default"),
                nnkRefTy.newTree(
                  newIdentNode("Y")
                )
              )
            ),
            newEmptyNode()
          )
        )
      )
    )
  )
)
stable :-1: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings: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, 17) template/generic instantiation of `default` from here
/home/runner/.choosenim/toolchains/nim-1.6.14/lib/system.nim(982, 17) Error: invalid type: 'Z' in this context: 'proc (_: typedesc[ref Z]): ref Z{.noSideEffect, gcsafe, locks: 0.}' for proc

Stats

  • Created 2023-07-07T02:37:01Z
  • Started 2023-07-07T02:37:35
  • Finished 2023-07-07T02:37:35
  • Duration now
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("X"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("o"),
          nnkBracketExpr.newTree(
            newIdentNode("static"),
            newIdentNode("auto")
          ),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("v"),
            nnkCall.newTree(
              newIdentNode("typeof"),
              newIdentNode("o")
            ),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Y"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("a"),
            nnkBracketExpr.newTree(
              newIdentNode("X"),
              nnkCall.newTree(
                newIdentNode("default"),
                nnkRefTy.newTree(
                  newIdentNode("Z")
                )
              )
            ),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Z"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("b"),
            nnkBracketExpr.newTree(
              newIdentNode("X"),
              nnkCall.newTree(
                newIdentNode("default"),
                nnkRefTy.newTree(
                  newIdentNode("Y")
                )
              )
            ),
            newEmptyNode()
          )
        )
      )
    )
  )
)
1.6.0 :-1: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings: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, 17) template/generic instantiation of `default` from here
/home/runner/.choosenim/toolchains/nim-1.6.0/lib/system.nim(982, 17) Error: invalid type: 'Z' in this context: 'proc (_: typedesc[ref Z]): ref Z{.noSideEffect, gcsafe, locks: 0.}' for proc

Stats

  • Created 2023-07-07T02:37:01Z
  • Started 2023-07-07T02:37:38
  • Finished 2023-07-07T02:37:39
  • Duration now
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("X"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("o"),
          nnkBracketExpr.newTree(
            newIdentNode("static"),
            newIdentNode("auto")
          ),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("v"),
            nnkCall.newTree(
              newIdentNode("typeof"),
              newIdentNode("o")
            ),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Y"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("a"),
            nnkBracketExpr.newTree(
              newIdentNode("X"),
              nnkCall.newTree(
                newIdentNode("default"),
                nnkRefTy.newTree(
                  newIdentNode("Z")
                )
              )
            ),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Z"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("b"),
            nnkBracketExpr.newTree(
              newIdentNode("X"),
              nnkCall.newTree(
                newIdentNode("default"),
                nnkRefTy.newTree(
                  newIdentNode("Y")
                )
              )
            ),
            newEmptyNode()
          )
        )
      )
    )
  )
)
1.4.0 :-1: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings: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, 17) template/generic instantiation of `default` from here
/home/runner/.choosenim/toolchains/nim-1.4.0/lib/system.nim(932, 16) Error: invalid type: 'Z' in this context: 'proc (T: type ref Z): ref Z{.noSideEffect.}' for proc

Stats

  • Created 2023-07-07T02:37:01Z
  • Started 2023-07-07T02:37:42
  • Finished 2023-07-07T02:37:42
  • Duration now
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("X"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("o"),
          nnkBracketExpr.newTree(
            newIdentNode("static"),
            newIdentNode("auto")
          ),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("v"),
            nnkCall.newTree(
              newIdentNode("typeof"),
              newIdentNode("o")
            ),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Y"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("a"),
            nnkBracketExpr.newTree(
              newIdentNode("X"),
              nnkCall.newTree(
                newIdentNode("default"),
                nnkRefTy.newTree(
                  newIdentNode("Z")
                )
              )
            ),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Z"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("b"),
            nnkBracketExpr.newTree(
              newIdentNode("X"),
              nnkCall.newTree(
                newIdentNode("default"),
                nnkRefTy.newTree(
                  newIdentNode("Y")
                )
              )
            ),
            newEmptyNode()
          )
        )
      )
    )
  )
)
1.2.0 :-1: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings: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, 17) template/generic instantiation of `default` from here
/home/runner/.choosenim/toolchains/nim-1.2.0/lib/system.nim(914, 16) Error: invalid type: 'Z' in this context: 'proc (T: type ref Z): ref Z{.noSideEffect.}' for proc

Stats

  • Created 2023-07-07T02:37:01Z
  • Started 2023-07-07T02:37:58
  • Finished 2023-07-07T02:37:58
  • Duration now
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("X"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("o"),
          nnkBracketExpr.newTree(
            newIdentNode("static"),
            newIdentNode("auto")
          ),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("v"),
            nnkCall.newTree(
              newIdentNode("typeof"),
              newIdentNode("o")
            ),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Y"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("a"),
            nnkBracketExpr.newTree(
              newIdentNode("X"),
              nnkCall.newTree(
                newIdentNode("default"),
                nnkRefTy.newTree(
                  newIdentNode("Z")
                )
              )
            ),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Z"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("b"),
            nnkBracketExpr.newTree(
              newIdentNode("X"),
              nnkCall.newTree(
                newIdentNode("default"),
                nnkRefTy.newTree(
                  newIdentNode("Y")
                )
              )
            ),
            newEmptyNode()
          )
        )
      )
    )
  )
)
1.0.0 :-1: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings: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, 17) template/generic instantiation of `default` from here
/home/runner/.choosenim/toolchains/nim-1.0.0/lib/system.nim(1818, 16) Error: invalid type: 'Z' in this context: 'proc (T: type ref Z): ref Z{.noSideEffect.}' for proc

Stats

  • Created 2023-07-07T02:37:01Z
  • Started 2023-07-07T02:38:11
  • Finished 2023-07-07T02:38:11
  • Duration now
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("X"),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("o"),
          nnkBracketExpr.newTree(
            newIdentNode("static"),
            newIdentNode("auto")
          ),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("v"),
            nnkCall.newTree(
              newIdentNode("typeof"),
              newIdentNode("o")
            ),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Y"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("a"),
            nnkBracketExpr.newTree(
              newIdentNode("X"),
              nnkCall.newTree(
                newIdentNode("default"),
                nnkRefTy.newTree(
                  newIdentNode("Z")
                )
              )
            ),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Z"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("b"),
            nnkBracketExpr.newTree(
              newIdentNode("X"),
              nnkCall.newTree(
                newIdentNode("default"),
                nnkRefTy.newTree(
                  newIdentNode("Y")
                )
              )
            ),
            newEmptyNode()
          )
        )
      )
    )
  )
)
🤖 Bug found in 40 minutes bisecting 6 commits at 0 commits per second.

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

No branches or pull requests

3 participants