Nim icon indicating copy to clipboard operation
Nim copied to clipboard

Segmentation fault on illegal recursion in generic types

Open haxscramper opened this issue 5 years ago • 1 comments
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

haxscramper avatar Jun 12 '20 10:06 haxscramper