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

Compiler crashes with internal error: getTypeDescAux(tyGenericParam) when attempting to get size of aliased unparametrized generic type #23789

Open
Mycsina opened this issue Jul 3, 2024 · 2 comments

Comments

@Mycsina
Copy link

Mycsina commented Jul 3, 2024

Description

Given the following code:

type
  foo*[A] = object
  bar*[T] = foo[T]

echo sizeof(foo)
echo sizeof(bar)

the compiler crashes with the message:

Error: internal error: getTypeDescAux(tyGenericParam)

Removing the last statement or parametrizing the aliased type makes the code compile.

Nim Version

Tested with:

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

git hash: 828cd58d8a0376a5b7a6ad58d73d66617b37629a
active boot switches: -d:release

and

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

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

Current Output

Error: internal error: getTypeDescAux(tyGenericParam)
Traceback (most recent call last)
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/nim.nim(169) nim
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/nim.nim(124) handleCmdLine
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/main.nim(338) mainCommand
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/main.nim(304) compileToBackend
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/main.nim(142) commandCompileToC
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/pipelines.nim(325) compilePipelineProject
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/pipelines.nim(245) compilePipelineModule
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/pipelines.nim(188) processPipelineModule
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/pipelines.nim(26) processPipeline
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/cgen.nim(2191) genTopLevelStmt
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/cgen.nim(1176) genProcBody
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/ccgstmts.nim(1708) genStmts
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/ccgexprs.nim(3077) expr
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/ccgexprs.nim(2774) genStmtList
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/ccgstmts.nim(1708) genStmts
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/ccgexprs.nim(3028) expr
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/ccgexprs.nim(2418) genMagicExpr
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/ccgexprs.nim(1223) genEcho
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/cgen.nim(759) initLocExpr
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/ccgexprs.nim(3050) expr
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/ccgexprs.nim(2739) genArrayConstr
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/ccgexprs.nim(3036) expr
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/ccgcalls.nim genCall
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/ccgcalls.nim(851) genAsgnCall
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/ccgcalls.nim(466) genPrefixCall
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/ccgcalls.nim(446) genParams
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/cgen.nim(345) genArg
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/cgen.nim(772) initLocExprSingleUse
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/ccgexprs.nim(3034) expr
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/ccgexprs.nim(2504) genMagicExpr
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/ccgtypes.nim(1161) getTypeDesc
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/ccgtypes.nim(946) getTypeDescAux
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/msgs.nim(634) internalErrorImpl
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/msgs.nim(589) liMessage
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/msgs.nim(433) handleError
/home/mycsina/.choosenim/toolchains/nim-#devel/compiler/msgs.nim(421) quit
FAILURE

Expected Output

Compiling without crashing and giving a compilation error instead

Possible Solution

No response

Additional Information

Attempting to get the size of any non-ref generic object containing an object of the generic type also crashes the compiler.

Do let me know if you want me to open another issue.

type
  foo*[A] = object
    a: A

echo sizeof(foo)

crashes the compiler, while

type
  foo*[A] = object

echo sizeof(foo)

will not

@juancarlospaco
Copy link
Collaborator

!nim c

type
  foo*[A] = object
  bar*[T] = foo[T]

echo sizeof(foo)
echo sizeof(bar)

Copy link
Contributor

github-actions bot commented Jul 3, 2024

🐧 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
Error: internal error: getTypeDescAux(tyGenericParam)
assertions.nim(34)       raiseAssert
Error: unhandled exception: errInternal [AssertionDefect]

IR

Compiled filesize 0 (0 bytes)

Stats

  • Started 2024-07-03T00:50:56
  • Finished 2024-07-03T00:50:56
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("foo")
      ),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("A"),
          newEmptyNode(),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("bar")
      ),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("T"),
          newEmptyNode(),
          newEmptyNode()
        )
      ),
      nnkBracketExpr.newTree(
        newIdentNode("foo"),
        newIdentNode("T")
      )
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    nnkCall.newTree(
      newIdentNode("sizeof"),
      newIdentNode("foo")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    nnkCall.newTree(
      newIdentNode("sizeof"),
      newIdentNode("bar")
    )
  )
)
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
Error: internal error: getTypeDescAux(tyGenericParam)
assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(682, 5) `false` errInternal [AssertionDefect]

IR

Compiled filesize 0 (0 bytes)

Stats

  • Started 2024-07-03T00:51:00
  • Finished 2024-07-03T00:51:00
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("foo")
      ),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("A"),
          newEmptyNode(),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("bar")
      ),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("T"),
          newEmptyNode(),
          newEmptyNode()
        )
      ),
      nnkBracketExpr.newTree(
        newIdentNode("foo"),
        newIdentNode("T")
      )
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    nnkCall.newTree(
      newIdentNode("sizeof"),
      newIdentNode("foo")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    nnkCall.newTree(
      newIdentNode("sizeof"),
      newIdentNode("bar")
    )
  )
)
2.0.4 👎 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
Error: internal error: getTypeDescAux(tyGenericParam)
assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(681, 5) `false` errInternal [AssertionDefect]

IR

Compiled filesize 0 (0 bytes)

Stats

  • Started 2024-07-03T00:51:03
  • Finished 2024-07-03T00:51:03
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("foo")
      ),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("A"),
          newEmptyNode(),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("bar")
      ),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("T"),
          newEmptyNode(),
          newEmptyNode()
        )
      ),
      nnkBracketExpr.newTree(
        newIdentNode("foo"),
        newIdentNode("T")
      )
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    nnkCall.newTree(
      newIdentNode("sizeof"),
      newIdentNode("foo")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    nnkCall.newTree(
      newIdentNode("sizeof"),
      newIdentNode("bar")
    )
  )
)
2.0.0 👎 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
Error: internal error: getTypeDescAux(tyGenericParam)
assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(664, 5) `false` errInternal [AssertionDefect]

IR

Compiled filesize 0 (0 bytes)

Stats

  • Started 2024-07-03T00:51:07
  • Finished 2024-07-03T00:51:07
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("foo")
      ),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("A"),
          newEmptyNode(),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("bar")
      ),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("T"),
          newEmptyNode(),
          newEmptyNode()
        )
      ),
      nnkBracketExpr.newTree(
        newIdentNode("foo"),
        newIdentNode("T")
      )
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    nnkCall.newTree(
      newIdentNode("sizeof"),
      newIdentNode("foo")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    nnkCall.newTree(
      newIdentNode("sizeof"),
      newIdentNode("bar")
    )
  )
)
1.6.20 👎 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
Error: internal error: getTypeDescAux(tyGenericParam)
fatal.nim(54)            sysFatal
Error: unhandled exception: options.nim(662, 14) `false` errInternal [AssertionDefect]

IR

Compiled filesize 0 (0 bytes)

Stats

  • Started 2024-07-03T00:51:10
  • Finished 2024-07-03T00:51:10
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("foo")
      ),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("A"),
          newEmptyNode(),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("bar")
      ),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("T"),
          newEmptyNode(),
          newEmptyNode()
        )
      ),
      nnkBracketExpr.newTree(
        newIdentNode("foo"),
        newIdentNode("T")
      )
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    nnkCall.newTree(
      newIdentNode("sizeof"),
      newIdentNode("foo")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    nnkCall.newTree(
      newIdentNode("sizeof"),
      newIdentNode("bar")
    )
  )
)
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
Error: internal error: getTypeDescAux(tyGenericParam)
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 (0 bytes)

Stats

  • Started 2024-07-03T00:51:13
  • Finished 2024-07-03T00:51:13
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("foo")
      ),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("A"),
          newEmptyNode(),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("bar")
      ),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("T"),
          newEmptyNode(),
          newEmptyNode()
        )
      ),
      nnkBracketExpr.newTree(
        newIdentNode("foo"),
        newIdentNode("T")
      )
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    nnkCall.newTree(
      newIdentNode("sizeof"),
      newIdentNode("foo")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    nnkCall.newTree(
      newIdentNode("sizeof"),
      newIdentNode("bar")
    )
  )
)
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
Error: internal error: getTypeDescAux(tyGenericParam)
No stack traceback available
To create a stacktrace, rerun compilation with ./koch temp c <file>

IR

Compiled filesize 0 (0 bytes)

Stats

  • Started 2024-07-03T00:51:16
  • Finished 2024-07-03T00:51:16
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("foo")
      ),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("A"),
          newEmptyNode(),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("bar")
      ),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("T"),
          newEmptyNode(),
          newEmptyNode()
        )
      ),
      nnkBracketExpr.newTree(
        newIdentNode("foo"),
        newIdentNode("T")
      )
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    nnkCall.newTree(
      newIdentNode("sizeof"),
      newIdentNode("foo")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    nnkCall.newTree(
      newIdentNode("sizeof"),
      newIdentNode("bar")
    )
  )
)
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
Error: internal error: getTypeDescAux(tyGenericParam)
No stack traceback available
To create a stacktrace, rerun compilation with ./koch temp c <file>

IR

Compiled filesize 0 (0 bytes)

Stats

  • Started 2024-07-03T00:51:18
  • Finished 2024-07-03T00:51:19
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("foo")
      ),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("A"),
          newEmptyNode(),
          newEmptyNode()
        )
      ),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("bar")
      ),
      nnkGenericParams.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("T"),
          newEmptyNode(),
          newEmptyNode()
        )
      ),
      nnkBracketExpr.newTree(
        newIdentNode("foo"),
        newIdentNode("T")
      )
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    nnkCall.newTree(
      newIdentNode("sizeof"),
      newIdentNode("foo")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    nnkCall.newTree(
      newIdentNode("sizeof"),
      newIdentNode("bar")
    )
  )
)
Stats
  • GCC 11.4.0
  • Clang 14.0.0
  • NodeJS 20.3
  • Created 2024-07-03T00:50:25Z
  • 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 26 minutes bisecting 8 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

2 participants