Nim
Nim copied to clipboard
Segmentation fault on illegal recursion in generic types
trafficstars
Generic type with illegal recursion causes segmentation fault in compiler instead of illegal recursion error.
Example
type
Test[T] = object
f2: Test[T]
let t = Test[int]()
Current Output
Segmentation fault (core dumped)
Expected Output
Error: illegal recursion in type 'Test'
Additional Information
koch temp output
bin/nim c -d:debug --debugger:native -d:nimBetterRun -d:leanCompiler /home/test/.choosenim/toolchains/nim-1.2.0/compiler/nim
Hint: used config file '/home/test/.choosenim/toolchains/nim-1.2.0/config/nim.cfg' [Conf]
Hint: used config file '/home/test/.choosenim/toolchains/nim-1.2.0/compiler/nim.cfg' [Conf]
Hint: 344 LOC; 0.025 sec; 6.004MiB peakmem; Debug build; proj: /home/test/.choosenim/toolchains/nim-1.2.0/compiler/nim; out: /home/test/.choosenim/toolchains/nim-1.2.0/compiler/nim [SuccessX]
/home/test/.choosenim/toolchains/nim-1.2.0/bin/nim_temp c test.nim
Traceback (most recent call last)
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/nim.nim(118) nim
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/nim.nim(95) handleCmdLine
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/cmdlinehelper.nim(77) loadConfigsAndRunMainCommand
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/main.nim(190) mainCommand
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/main.nim(92) commandCompileToC
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/modules.nim(143) compileProject
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/modules.nim(84) compileModule
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/passes.nim(210) processModule
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/passes.nim(86) processTopLevelStmt
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/sem.nim(604) myProcess
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/sem.nim(590) semStmtAndGenerateGenerics
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/sempass2.nim(1279) trackStmt
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/sempass2.nim(1083) track
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/sempass2.nim(900) track
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/sempass2.nim(1009) track
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/sempass2.nim(761) createTypeBoundOps
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(882) createTypeBoundOps
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(799) produceSym
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(710) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(180) fillBodyObjT
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(132) fillBodyObjTImpl
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(125) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(90) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(730) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(710) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(180) fillBodyObjT
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(132) fillBodyObjTImpl
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(125) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(90) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(730) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(710) fillBody
(1874 calls omitted) ...
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(125) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(90) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(730) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(710) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(180) fillBodyObjT
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(132) fillBodyObjTImpl
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(125) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(90) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(730) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(710) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(180) fillBodyObjT
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(132) fillBodyObjTImpl
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(125) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(90) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(730) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(710) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(180) fillBodyObjT
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(132) fillBodyObjTImpl
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(125) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(90) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(730) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(710) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(180) fillBodyObjT
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(132) fillBodyObjTImpl
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(125) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(90) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(730) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(710) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(180) fillBodyObjT
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(132) fillBodyObjTImpl
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(125) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(90) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(730) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(710) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(180) fillBodyObjT
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(132) fillBodyObjTImpl
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(125) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(90) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(730) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(710) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(180) fillBodyObjT
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(132) fillBodyObjTImpl
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(125) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(90) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(730) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(710) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(180) fillBodyObjT
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(132) fillBodyObjTImpl
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(125) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(90) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(730) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(710) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(180) fillBodyObjT
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(132) fillBodyObjTImpl
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(125) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(90) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(730) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(710) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(180) fillBodyObjT
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(132) fillBodyObjTImpl
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(125) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(90) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(730) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(710) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(180) fillBodyObjT
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(132) fillBodyObjTImpl
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(125) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(90) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(730) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(710) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(180) fillBodyObjT
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(132) fillBodyObjTImpl
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(125) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(90) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(730) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(710) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(180) fillBodyObjT
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(132) fillBodyObjTImpl
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(125) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(90) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(730) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(710) fillBody
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(180) fillBodyObjT
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(132) fillBodyObjTImpl
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(125) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(90) fillBodyObj
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/liftdestructors.nim(55) dotField
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/ast.nim(1217) newSymNode
/home/test/.choosenim/toolchains/nim-1.2.0/compiler/ast.nim(1108) newNode
/home/test/.choosenim/toolchains/nim-1.2.0/lib/system/gc.nim(440) newObj
/home/test/.choosenim/toolchains/nim-1.2.0/lib/system/alloc.nim(757) rawAlloc
/home/test/.choosenim/toolchains/nim-1.2.0/lib/system/alloc.nim(631) getSmallChunk
/home/test/.choosenim/toolchains/nim-1.2.0/lib/system/alloc.nim(589) getBigChunk
/home/test/.choosenim/toolchains/nim-1.2.0/lib/system/alloc.nim(189) findSuitableBlock
/home/test/.choosenim/toolchains/nim-1.2.0/lib/system/alloc.nim(150) lsbit
/home/test/.choosenim/toolchains/nim-1.2.0/lib/system/alloc.nim msbit
Error: call depth limit reached in a debug build (2000 function calls). You can change it with -d:nimCallDepthLimit=<int> but really try to avoid deep recursions instead.
FAILURE
- Related: #1145
Both
$ nim -v
Nim Compiler Version 1.2.0 [Linux: amd64]
and
$ nim -v
Nim Compiler Version 1.3.5 [Linux: amd64]
Compiled at 2020-06-11
have the same issue