Crashes when highlighting system.nim if nimsuggest is compiled with -d:release
$ nimsuggest /path/to/system.nim
usage: sug|con|def|use|dus|chk|mod|highlight|outline|known file.nim[;dirtyfile.nim]:line:col
type 'quit' to quit
type 'debug' to toggle debug mode on/off
type 'terse' to toggle terse mode on/off
> highlight /path/to/system.nim
highlight skType 26 2 3
highlight skType 28 2 4
highlight skType 29 2 5
highlight skType 30 2 5
highlight skType 31 2 5
highlight skType 32 2 4
highlight skType 33 2 5
highlight skType 34 2 6
highlight skType 35 2 6
highlight skType 36 2 6
highlight skType 37 2 5
highlight skType 38 2 7
highlight skType 39 2 7
highlight skType 44 2 4
highlight skType 48 2 4
highlight skType 49 2 6
highlight skType 50 2 7
highlight skType 51 2 7
highlight skType 54 2 8
highlight skEnumField 57 8 4
highlight skConst 57 2 2
highlight skEnumField 58 9 5
highlight skConst 58 2 3
highlight skConst 60 23 3
highlight skConst 60 45 3
highlight skConst 61 14 3
highlight skProc 63 6 2
highlight skType 63 17 8
highlight skType 63 28 8
highlight skProc 66 6 3
highlight skType 66 18 8
highlight skType 66 29 8
highlight skProc 69 6 3
highlight skType 69 15 8
highlight skType 69 26 8
highlight skType 73 2 7
highlight skType 78 3 3
highlight skType 79 3 3
highlight skType 81 3 3
highlight skType 83 2 4
highlight skType 84 2 4
highlight skType 85 2 3
highlight skType 86 2 7
highlight skType 88 2 5
highlight skType 91 2 13
highlight skType 94 2 15
highlight skType 97 2 11
highlight skType 100 2 11
highlight skType 104 2 9
highlight skType 107 2 10
highlight skType 85 18 4
highlight skType 91 19 3
highlight skType 91 23 4
highlight skType 91 28 5
highlight skType 91 34 5
highlight skType 91 40 5
highlight skType 94 21 4
highlight skType 94 26 5
highlight skType 94 32 6
highlight skType 94 39 6
highlight skType 94 46 6
highlight skType 97 17 13
highlight skType 97 31 15
highlight skType 100 17 3
highlight skType 100 21 4
highlight skType 100 26 5
highlight skType 100 32 5
highlight skType 100 38 5
highlight skType 100 44 4
highlight skType 100 54 4
highlight skType 100 59 5
highlight skType 100 65 6
highlight skType 100 72 6
highlight skType 100 79 6
highlight skType 104 15 5
highlight skType 104 21 7
highlight skType 104 29 7
highlight skType 107 16 11
highlight skType 107 28 9
highlight skProc 110 5 7
highlight skType 110 17 7
highlight skType 110 27 4
highlight skProc 123 12 0
highlight skProc 124 7 16
highlight skType 124 31 7
highlight skProc 152 5 8
highlight skType 152 18 7
highlight skType 152 28 4
highlight skProc 167 12 0
highlight skProc 170 5 15
highlight skType 170 25 7
highlight skType 170 35 4
highlight skProc 175 6 4
highlight skGenericParam 175 23 1
highlight skType 175 13 1
highlight skType 175 31 1
highlight skType 175 13 1
highlight skProc 190 5 10
highlight skGenericParam 190 23 1
highlight skType 190 17 1
highlight skType 190 31 1
highlight skType 190 17 1
highlight skProc 203 12 0
highlight skType 205 5 6
highlight skType 211 5 4
highlight skProc 222 12 0
highlight skType 224 4 10
highlight skProc 228 7 6
highlight skType 228 18 7
highlight skEnumField 228 34 10
highlight skType 228 47 8
highlight skProc 234 6 3
highlight skType 234 15 4
highlight skType 234 22 4
highlight skProc 237 6 3
highlight skType 237 18 4
highlight skType 237 25 4
highlight skProc 242 6 2
highlight skType 242 17 4
highlight skType 242 24 4
highlight skProc 247 6 3
highlight skType 247 18 4
highlight skType 247 25 4
highlight skEnumField 251 21 4
highlight skConst 251 6 12
highlight skProc 253 5 11
highlight skGenericParam 253 32 1
highlight skType 253 18 1
highlight skProc 256 5 3
highlight skGenericParam 256 24 1
highlight skType 256 10 1
highlight skType 256 51 1
highlight skType 256 10 1
highlight skType 256 10 1
highlight skProc 269 12 0
highlight skProc 275 7 5
highlight skGenericParam 275 26 1
highlight skType 275 14 1
highlight skProc 280 5 8
highlight skGenericParam 280 27 1
highlight skType 280 15 1
highlight skProc 286 5 4
highlight skGenericParam 286 21 1
highlight skType 286 11 1
highlight skType 286 25 1
highlight skType 286 11 1
highlight skProc 288 2 8
highlight skType 291 2 5
highlight skType 292 2 5
highlight skType 294 2 9
highlight skType 298 2 7
highlight skType 299 2 3
highlight skType 300 2 3
fatal.nim(39) sysFatal
Error: unhandled exception: semtypes.nim(1902, 12) `c.graph.sysTypes[tySequence] == nil` [AssertionError]
nimsuggest version:
Nim Compiler Version 0.20.99 [Linux: amd64]
Compiled at 2019-09-20
Copyright (c) 2006-2019 by Andreas Rumpf
git hash: 7bc5bf83345a0ebaef3dca9395f0bc7d285ba61e
active boot switches: -d:release --gc:markAndSweep
Doesn't seem to crash here
Still crashing here:
$ nimsuggest /usr/lib/nim/lib/system.nim
Hint: used config file '/etc/nim/nim.cfg' [Conf]
Hint: used config file '/etc/nim/config.nims' [Conf]
usage: sug|con|def|use|dus|chk|mod|highlight|outline|known|project file.nim[;dirtyfile.nim]:line:col
type 'quit' to quit
type 'debug' to toggle debug mode on/off
type 'terse' to toggle terse mode on/off
> highlight /usr/lib/nim/lib/system.nim
highlight skType 26 2 5
highlight skType 27 2 7
highlight skType 28 2 7
highlight skType 33 2 4
highlight skType 34 2 6
highlight skType 35 2 7
highlight skType 36 2 7
highlight skType 39 2 8
highlight skType 42 3 3
highlight skType 43 3 3
highlight skType 45 3 3
highlight skType 47 2 4
highlight skType 48 2 4
highlight skType 49 2 3
highlight skType 50 2 7
highlight skType 52 2 5
highlight skType 49 18 4
highlight skProc 58 5 13
highlight skType 58 28 6
highlight skType 58 37 4
highlight skProc 66 5 13
highlight skType 66 33 6
highlight skType 66 42 4
highlight skConst 74 23 3
highlight skConst 74 45 3
highlight skConst 75 14 3
highlight skProc 77 6 2
highlight skType 77 17 8
highlight skType 77 28 8
highlight skProc 80 6 3
highlight skType 80 18 8
highlight skType 80 29 8
highlight skProc 83 6 3
highlight skType 83 15 8
highlight skType 83 26 8
highlight skType 88 2 9
highlight skType 91 2 10
highlight skType 88 15 5
highlight skType 88 21 7
highlight skType 88 29 7
highlight skType 91 16 11
highlight skType 91 28 9
highlight skProc 94 5 7
highlight skType 94 17 7
highlight skType 94 27 4
highlight skProc 107 12 0
highlight skType 109 4 7
highlight skProc 119 12 0
highlight skProc 120 7 16
highlight skType 120 45 7
highlight skProc 153 12 0
highlight skProc 154 7 8
highlight skType 154 20 7
highlight skType 154 30 4
highlight skProc 171 12 0
highlight skProc 172 7 15
highlight skType 172 27 7
highlight skType 172 37 4
highlight skProc 178 6 4
highlight skGenericParam 178 23 1
highlight skType 178 13 1
highlight skType 178 31 1
highlight skType 178 13 1
highlight skProc 193 5 10
highlight skGenericParam 193 23 1
highlight skType 193 17 1
highlight skType 193 31 1
highlight skType 193 17 1
highlight skProc 206 12 0
highlight skType 208 5 6
highlight skType 214 5 4
highlight skProc 225 12 0
highlight skType 227 4 10
highlight skProc 231 7 6
highlight skType 231 18 7
highlight skEnumField 231 34 10
highlight skType 231 47 8
highlight skEnumField 238 21 4
highlight skConst 238 6 12
highlight skProc 240 5 11
highlight skGenericParam 240 32 1
highlight skType 240 18 1
highlight skEnumField 243 5 4
highlight skProc 244 7 3
highlight skGenericParam 244 26 1
highlight skType 244 12 1
highlight skType 244 53 1
highlight skType 244 12 1
highlight skType 244 12 1
highlight skProc 257 5 8
highlight skGenericParam 257 27 1
highlight skType 257 15 1
highlight skProc 263 5 4
highlight skGenericParam 263 21 1
highlight skType 263 11 1
highlight skType 263 25 1
highlight skType 263 11 1
highlight skProc 265 2 8
highlight skType 268 2 5
highlight skType 269 2 5
highlight skType 271 2 9
highlight skType 275 2 7
highlight skType 276 2 3
highlight skType 277 2 3
fatal.nim(49) sysFatal
Error: unhandled exception: semtypes.nim(2037, 12) `c.graph.sysTypes[tySequence] == nil` [AssertionDefect]
nimsuggest version:
Nim Compiler Version 1.3.7 [Linux: amd64]
Compiled at 2020-10-07
Copyright (c) 2006-2020 by Andreas Rumpf
git hash: 3b901d1e361f49d48fb64d115e42c04a4a37100c
active boot switches: -d:release --gc:markAndSweep
Just tested it with the latest version, I can't replicate the crash even with repeated calls.
nimsuggest version:
Nim Compiler Version 1.5.1 [Linux: amd64]
Compiled at 2021-01-03
Copyright (c) 2006-2020 by Andreas Rumpf
git hash: cf714c129f7dd598863d1cc588e685df2438c658
active boot switches: -d:release -d:danger --gc:markAndSweep
Can't replicate it either, now it just doesn't work:
$ bin/nimsuggest lib/system.nim
fatal.nim(53) sysFatal
Error: unhandled exception: semtypes.nim(2046, 12) `c.graph.sysTypes[tySequence] == nil` [AssertionDefect]
$ bin/nimsuggest --version
Nim Compiler Version 1.5.1 [Linux: amd64]
Compiled at 2021-01-06
Copyright (c) 2006-2020 by Andreas Rumpf
git hash: d721f5cecad90a0aa7e2ea144607ffafdf647e31
active boot switches: -d:release --gc:markAndSweep
Note that nimsuggest was compiled with -d:release only and no -d:danger. Without -d:danger assertions are left enabled.
This might be as simple as removing the assert or if it's required putting in a guard for nimsuggest. I wasn't able to entirely figure out the reason why the assert had to go in.
The reason it gets tripped up is because highlight triggers the sem pass, which finds the magic types, and since it's system.nim, it finds the seq magic type. At which point it re-adds it and since it's already been processed of course it runs afoul of the assertion.
I'm guessing this is all much better with IC as the module wouldn't be re-processed unless necessary and there wouldn't be an exceptional case for nimsuggest at that point.
@Araq should the assert simply go or be guarded against for now?