nimsuggest icon indicating copy to clipboard operation
nimsuggest copied to clipboard

Crashes when highlighting system.nim if nimsuggest is compiled with -d:release

Open alaviss opened this issue 6 years ago • 5 comments

$ 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

alaviss avatar Sep 20 '19 10:09 alaviss

Doesn't seem to crash here

ghost avatar Oct 07 '20 10:10 ghost

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

alaviss avatar Oct 07 '20 13:10 alaviss

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

saem avatar Jan 03 '21 07:01 saem

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.

alaviss avatar Jan 06 '21 06:01 alaviss

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?

saem avatar Jan 10 '21 01:01 saem