Created attachment 1675
Callgrind file that causes the crash
Arch/Manjaro 64-bit, dmd is 2.078.0 from official repositories.
dtools-ddemangle < file crashes with a Range Violation. Cannot seem to get line numbers other than the line 230 in the message.
Attaching file.
(Unsure if this should be filed towards tools or druntime so please reassign if in error, or close if invalid.)
Comment #1 by timothee.cour2 — 2018-01-28T00:45:01Z
just ran into that why doing:
git clone https://github.com/dlang-community/D-Scanner && cd D-Scanner && dub build && nm bin/dscanner|ddemangle
After reduction here's a symbol that triggers (see below).
In addition to fixing this bug, we should make demangle inner loop protected via a try/catch so that demangle keeps going till end of stdin, and then rethrow error at the end (at least as an option ddemangle --keep-going-on-error)
```
echo _D3std4conv__T10emplaceRefTSQBa12experimental5lexer__T14TokenStructureThVAyaa305_0a20202020737472696e6720636f6d6d656e743b0a20202020737472696e6720747261696c696e67436f6d6d656e743b0a0a20202020696e74206f70436d702873697a655f7420692920636f6e73742070757265206e6f7468726f77204073616665207b0a202020202020202069662028696e646578203c2069292072657475726e202d313b0a202020202020202069662028696e646578203e2069292072657475726e20313b0a202020202020202072657475726e20303b0a202020207d0a0a20202020696e74206f70436d702872656620636f6e737420747970656f66287468697329206f746865722920636f6e73742070757265206e6f7468726f77204073616665207b0a202020202020202072657475726e206f70436d70286f746865722e696e646578293b0a202020207d0aZQYoTQZtTQZxZQBAoFKQBAhKQBAmZ1S11__xopEqualsFKxSQBCjQBCj__TQBCiTQBCaTQBCfTQBCkZQBDcFKQBCvKQBDaZQCoKxQCbZb | ddemangle
core.exception.RangeError@src/core/demangle.d(230): Range violation
----------------
4 ddemangle 0x0000000104b1fece _d_arrayboundsp + 110
5 ddemangle 0x0000000104b18ad7 pure @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.append(const(char)[]) + 483
6 ddemangle 0x0000000104b18c0d pure @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.put(const(char)[]) + 129
7 ddemangle 0x0000000104b1d28a pure @safe void core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseValue(char[], char) + 1574
8 ddemangle 0x0000000104b1ded8 pure @safe void core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseTemplateArgs() + 652
9 ddemangle 0x0000000104b1e69e pure @safe void core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseTemplateInstanceName(bool) + 282
10 ddemangle 0x0000000104b1e9be pure @safe void core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseSymbolName() + 162
11 ddemangle 0x0000000104b1eca0 pure @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseQualifiedName() + 68
12 ddemangle 0x0000000104b1ad82 pure @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseType(char[]) + 3558
13 ddemangle 0x0000000104b1bdcf pure @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseType(char[]).__lambda4() + 19
14 ddemangle 0x0000000104b1bccb pure @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseType(char[]).parseBackrefType(scope char[] delegate() pure @safe) + 263
15 ddemangle 0x0000000104b1a036 pure @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseType(char[]) + 154
16 ddemangle 0x0000000104b1c8ac pure @safe void core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseFuncArguments() + 760
17 ddemangle 0x0000000104b1ebd2 pure @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseFunctionTypeNoReturn(bool) + 374
18 ddemangle 0x0000000104b1ecaa pure @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseQualifiedName() + 78
19 ddemangle 0x0000000104b1ad82 pure @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseType(char[]) + 3558
20 ddemangle 0x0000000104b1a1d2 pure @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseType(char[]) + 566
21 ddemangle 0x0000000104b1c8ac pure @safe void core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseFuncArguments() + 760
22 ddemangle 0x0000000104b1ebd2 pure @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseFunctionTypeNoReturn(bool) + 374
23 ddemangle 0x0000000104b1ee82 pure @safe void core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseMangledName(bool, ulong) + 374
24 ddemangle 0x0000000104b1f469 pure nothrow @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.doDemangle!(core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseMangledName).doDemangle() + 49
25 ddemangle 0x0000000104b182ed pure nothrow @safe char[] core.demangle.demangle(const(char)[], char[]) + 121
26 ddemangle 0x0000000104b07508 nothrow @safe const(char)[] ddemangle.demangleMatch!(char[]).demangleMatch(std.regex.Captures!(char[]).Captures) + 92
27 ddemangle 0x0000000104b0746c nothrow @safe void std.regex.replaceAll!(ddemangle.demangleMatch, char[], std.regex.internal.ir.Regex!(char).Regex).replaceAll(char[], std.regex.internal.ir.Regex!(char).Regex).__lambda3!(std.regex.Captures!(char[]).Captures, std.array.Appender!(char[]).Appender).__lambda3(std.regex.Captures!(char[]).Captures, std.array.Appender!(char[]).Appender) + 80
28 ddemangle 0x0000000104b07309 @safe void std.regex.replaceMatchesInto!(std.regex.replaceAll!(ddemangle.demangleMatch, char[], std.regex.internal.ir.Regex!(char).Regex).replaceAll(char[], std.regex.internal.ir.Regex!(char).Regex).__lambda3, std.array.Appender!(char[]).Appender, char[], std.regex.RegexMatch!(char[]).RegexMatch).replaceMatchesInto(ref std.array.Appender!(char[]).Appender, char[], std.regex.RegexMatch!(char[]).RegexMatch) + 301
29 ddemangle 0x0000000104b05718 @safe char[] std.regex.replaceAllWith!(std.regex.replaceAll!(ddemangle.demangleMatch, char[], std.regex.internal.ir.Regex!(char).Regex).replaceAll(char[], std.regex.internal.ir.Regex!(char).Regex).__lambda3, std.regex.matchAll, char[], std.regex.internal.ir.Regex!(char).Regex).replaceAllWith(char[], std.regex.internal.ir.Regex!(char).Regex) + 268
30 ddemangle 0x0000000104b05602 @trusted char[] std.regex.replaceAll!(ddemangle.demangleMatch, char[], std.regex.internal.ir.Regex!(char).Regex).replaceAll(char[], std.regex.internal.ir.Regex!(char).Regex) + 54
31 ddemangle 0x0000000104b055bc @safe char[] ddemangle.ddemangle!(char[]).ddemangle(char[]) + 96
32 ddemangle 0x0000000104adf8a6 _Dmain + 470
33 ddemangle 0x0000000104b31c13 void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll().__lambda1() + 39
34 ddemangle 0x0000000104b31aa3 void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate()) + 31
35 ddemangle 0x0000000104b31b7e void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll() + 138
36 ddemangle 0x0000000104b31aa3 void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate()) + 31
37 ddemangle 0x0000000104b31a11 _d_run_main + 485
38 ddemangle 0x0000000104adfa1f main + 15
39 libdyld.dylib 0x00007fff53874144 start + 0
40 ??? 0x0000000000000000 0x0 + 0
```
Comment #2 by timothee.cour2 — 2018-02-27T06:03:09Z
further reduced:
```
auto mangled="_D4vibe4data4bson14BsonSerializer__T18endWriteArrayEntryTSQCeQCc13serialization__T9SubTraitsTSQDoQDmQBk__T6TraitsTAfSQElQEjQCh13DefaultPolicyVS6dproto10attributes6PackedS0VSQBeQBa10ProtoFieldS2a5_666c6f6174i6ZQDzTfZQFdZQHbMFNaNbNiNfmZv";
import core.demangle;
auto dst=new char[50];
auto ret=demangle(mangled, dst);
import std.stdio;
writeln(ret);
```
```
core.exception.RangeError@core/demangle.d(230): Range violation
----------------
0 lldbdplugin 0x000000010bbd1839 object.Throwable.TraceInfo core.runtime.defaultTraceHandler(void*) + 137
1 lldbdplugin 0x000000010bbeaf7a _d_createTrace + 58
2 lldbdplugin 0x000000010bbebb74 _d_throw_exception + 132
3 lldbdplugin 0x000000010bbcf71e onRangeError + 158
4 lldbdplugin 0x000000010bbd01e7 _d_arraybounds + 7
5 lldbdplugin 0x000000010bbc947b pure @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.append(const(char)[]) + 251
6 lldbdplugin 0x000000010bbca270 pure @safe void core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseLName() + 400
7 lldbdplugin 0x000000010bbca30f pure @safe void core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseLName() + 559
8 lldbdplugin 0x000000010bbcb324 pure @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseQualifiedName() + 68
9 lldbdplugin 0x000000010bbca482 pure @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseType(char[]) + 114
10 lldbdplugin 0x000000010bbcc8dd pure @safe void core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseTemplateArgs() + 141
11 lldbdplugin 0x000000010bbcd073 pure @safe void core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseTemplateInstanceName(bool) + 323
12 lldbdplugin 0x000000010bbccea7 pure @safe void core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseMangledName(bool, ulong) + 487
13 lldbdplugin 0x000000010bbcd4c2 pure nothrow @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.doDemangle!(core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseMangledName).doDemangle() + 130
14 lldbdplugin 0x000000010bbc2774 pure nothrow @safe char[] core.demangle.demangle(const(char)[], char[]) + 84
15 lldbdplugin 0x000000010ba9ed3e void dtools.lldbdplugin.__unittest__Users_timothee_git_clone__timotheecour__dtools_dtools_lldbdplugin_d_115_1() + 78
16 lldbdplugin 0x000000010ba9ffda dtools.lldbdplugin.__unittest + 10
17 lldbdplugin 0x000000010bbd1ff7 int core.runtime.runModuleUnitTests().__foreachbody2(object.ModuleInfo*) + 23
18 lldbdplugin 0x000000010bbf3fa1 int rt.minfo.moduleinfos_apply(scope int delegate(immutable(object.ModuleInfo*))).__foreachbody2(ref rt.sections_elf_shared.DSO) + 49
19 lldbdplugin 0x000000010bbf4ac9 int rt.sections_elf_shared.DSO.opApply(scope int delegate(ref rt.sections_elf_shared.DSO)) + 57
20 lldbdplugin 0x000000010bbf3f4b int rt.minfo.moduleinfos_apply(scope int delegate(immutable(object.ModuleInfo*))) + 27
21 lldbdplugin 0x000000010bbe529e int object.ModuleInfo.opApply(scope int delegate(object.ModuleInfo*)) + 30
22 lldbdplugin 0x000000010bbd1ee2 runModuleUnitTests + 130
23 lldbdplugin 0x000000010bbeb4ea _d_run_main + 442
24 lldbdplugin 0x000000010ba9e654 main + 36
```
Comment #3 by timothee.cour2 — 2018-02-27T08:25:13Z