digitalmars.D.bugs - [Issue 18996] New: Inserting a struct into an std.container Array
- d-bugmail puremagic.com (220/220) Jun 15 2018 https://issues.dlang.org/show_bug.cgi?id=18996
https://issues.dlang.org/show_bug.cgi?id=18996 Issue ID: 18996 Summary: Inserting a struct into an std.container Array causes SIGILL(4). Illegal Instruction. Product: D Version: D2 Hardware: x86_64 OS: Linux Status: NEW Severity: regression Priority: P1 Component: phobos Assignee: nobody puremagic.com Reporter: viserion.thrall gmail.com The following code causes a SIGILL or signal 4 on Linux. import std.container; struct Record { string name; } struct Foo(T) { alias RecordArray = Array!T; void test() { T value; array_.insert(value); } RecordArray array_; } void main(string[] arguments) { Foo!Record foo; foo.test(); } I don't have much experience with gdb so this is the best I could do: (gdb) run Starting program: /home/soulsbane/Projects/D/ssloc/ssloc [Thread debugging using libthread_db enabled] Using host libthread_db library "/usr/lib/libthread_db.so.1". Program received signal SIGILL, Illegal instruction. 0x0000555555614204 in _D2gc4impl5protoQo7ProtoGC11removeRangeMFNbNiPvZv () (gdb) bt _D3std9container5array__T5ArrayTS3app6RecordZQu7Payload7reserveMFNbNimZv (this=..., elements=1) at /usr/include/dlang/dmd/std/container/array.d:382 _D3std9container5array__T5ArrayTS3app6RecordZQu7Payload__T10insertBackTQBnZQrMFNbNiQBzZm (this=..., elem=...) at /usr/include/dlang/dmd/std/container/array.d:404 _D3std9container5array__T5ArrayTS3app6RecordZQu__T10insertBackTQBfZQrMFNbNiQBrZm (this=..., stuff=...) at /usr/include/dlang/dmd/std/container/array.d:831 at source/app.d:73 (gdb) disas Dump of assembler code for function _D2gc4impl5protoQo7ProtoGC11removeRangeMFNbNiPvZv: 0x0000555555614044 <+0>: push %rbp 0x0000555555614045 <+1>: mov %rsp,%rbp 0x0000555555614048 <+4>: sub $0x40,%rsp 0x000055555561404c <+8>: mov %rbx,-0x40(%rbp) 0x0000555555614050 <+12>: mov %r12,-0x38(%rbp) 0x0000555555614054 <+16>: mov %r13,-0x30(%rbp) 0x0000555555614058 <+20>: mov %r14,-0x28(%rbp) 0x000055555561405c <+24>: mov %rdi,-0x8(%rbp) 0x0000555555614060 <+28>: mov %rsi,%rdx 0x0000555555614063 <+31>: mov %rdi,%rcx 0x0000555555614066 <+34>: add $0x28,%rcx 0x000055555561406a <+38>: mov 0x8(%rcx),%r8 0x000055555561406e <+42>: mov (%rcx),%r9 0x0000555555614071 <+45>: test %r8,%r8 0x0000555555614074 <+48>: je 0x555555614204 <_D2gc4impl5protoQo7ProtoGC11removeRangeMFNbNiPvZv+448> 0x000055555561407a <+54>: mov %r9,%rcx 0x000055555561407d <+57>: cmp %rdx,(%rcx) 0x0000555555614080 <+60>: jne 0x5555556141e4 <_D2gc4impl5protoQo7ProtoGC11removeRangeMFNbNiPvZv+416> 0x0000555555614086 <+66>: mov -0x8(%rbp),%r8 0x000055555561408a <+70>: add $0x28,%r8 0x000055555561408e <+74>: mov %r8,-0x20(%rbp) 0x0000555555614092 <+78>: mov 0x8(%r8),%rsi 0x0000555555614096 <+82>: mov (%r8),%rdx 0x0000555555614099 <+85>: lea (%rsi,%rsi,2),%rsi 0x000055555561409d <+89>: lea -0x18(%rdx,%rsi,8),%rsi 0x00005555556140a5 <+97>: mov %rcx,%rdi 0x00005555556140a8 <+100>: movsq %ds:(%rsi),%es:(%rdi) 0x00005555556140aa <+102>: movsq %ds:(%rsi),%es:(%rdi) 0x00005555556140ac <+104>: movsq %ds:(%rsi),%es:(%rdi) 0x00005555556140ae <+106>: xor %eax,%eax 0x00005555556140b0 <+108>: mov %al,-0x10(%rbp) 0x00005555556140b3 <+111>: mov -0x20(%rbp),%r14 0x00005555556140b7 <+115>: mov 0x8(%r14),%r13 0x00005555556140bb <+119>: dec %r13 0x00005555556140be <+122>: mov %r13,%r9 0x00005555556140c1 <+125>: lea (%r9,%r9,2),%rbx 0x00005555556140c5 <+129>: lea 0x0(,%rbx,8),%rbx 0x00005555556140cd <+137>: mov %r13,%rdx 0x00005555556140d0 <+140>: or $0x18,%rdx 0x00005555556140d7 <+147>: shr $0x20,%rdx 0x00005555556140db <+151>: je 0x5555556140fa <_D2gc4impl5protoQo7ProtoGC11removeRangeMFNbNiPvZv+182> 0x00005555556140dd <+153>: mov %rbx,%rax 0x00005555556140e0 <+156>: movabs $0xaaaaaaaaaaaaaaab,%rdx 0x00005555556140ea <+166>: mul %rdx 0x00005555556140ed <+169>: shr $0x4,%rdx 0x00005555556140f1 <+173>: cmp %r13,%rdx 0x00005555556140f4 <+176>: je 0x5555556140fa <_D2gc4impl5protoQo7ProtoGC11removeRangeMFNbNiPvZv+182> 0x00005555556140f6 <+178>: movb $0x1,-0x10(%rbp) 0x00005555556140fa <+182>: rex movsbl -0x10(%rbp),%esi 0x00005555556140ff <+187>: xor $0x1,%sil 0x0000555555614103 <+191>: je 0x5555556141a7 <_D2gc4impl5protoQo7ProtoGC11removeRangeMFNbNiPvZv+355> 0x0000555555614109 <+197>: mov %rbx,-0x18(%rbp) 0x000055555561410d <+201>: mov 0x8(%r14),%rcx 0x0000555555614111 <+205>: cmp %rcx,%r13 0x0000555555614114 <+208>: jae 0x555555614153 <_D2gc4impl5protoQo7ProtoGC11removeRangeMFNbNiPvZv+271> ---Type <return> to continue, or q <return> to quit--- 0x0000555555614116 <+210>: mov %r13,%rax 0x0000555555614119 <+213>: lea (%rax,%rax,2),%rsi 0x000055555561411d <+217>: lea 0x0(,%rsi,8),%rsi 0x0000555555614125 <+225>: add (%r14),%rsi 0x0000555555614128 <+228>: mov %rcx,%rdx 0x000055555561412b <+231>: sub %rax,%rdx 0x000055555561412e <+234>: je 0x555555614153 <_D2gc4impl5protoQo7ProtoGC11removeRangeMFNbNiPvZv+271> 0x0000555555614130 <+236>: mov %rsi,%rbx 0x0000555555614133 <+239>: lea (%rdx,%rdx,2),%r12 0x0000555555614137 <+243>: lea 0x0(,%r12,8),%r12 0x000055555561413f <+251>: add %rsi,%r12 0x0000555555614142 <+254>: mov %rbx,%rdi 0x0000555555614145 <+257>: callq 0x555555618944 <_D2rt4util9container6common__T7destroyTS2gc11gcinterface5RangeZQBhFNaNbNiNfKQBlZv> 0x000055555561414a <+262>: add $0x18,%rbx 0x000055555561414e <+266>: cmp %r12,%rbx 0x0000555555614151 <+269>: jb 0x555555614142 <_D2gc4impl5protoQo7ProtoGC11removeRangeMFNbNiPvZv+254> 0x0000555555614153 <+271>: mov (%r14),%rsi 0x0000555555614156 <+274>: mov -0x18(%rbp),%rdi 0x000055555561415a <+278>: callq 0x5555555fa40c <_D2rt4util9container6common8xreallocFNbNiPvmZQe> 0x000055555561415f <+283>: mov %rax,(%r14) 0x0000555555614162 <+286>: mov 0x8(%r14),%rcx 0x0000555555614166 <+290>: cmp %r13,%rcx 0x0000555555614169 <+293>: jae 0x5555556141cb <_D2gc4impl5protoQo7ProtoGC11removeRangeMFNbNiPvZv+391> 0x000055555561416b <+295>: lea (%rcx,%rcx,2),%rsi 0x000055555561416f <+299>: lea 0x0(,%rsi,8),%rsi 0x0000555555614177 <+307>: add %rax,%rsi 0x000055555561417a <+310>: mov %r13,%rdx 0x000055555561417d <+313>: sub %rcx,%rdx 0x0000555555614180 <+316>: je 0x5555556141cb <_D2gc4impl5protoQo7ProtoGC11removeRangeMFNbNiPvZv+391> 0x0000555555614182 <+318>: mov %rsi,%rbx 0x0000555555614185 <+321>: lea (%rdx,%rdx,2),%r12 0x0000555555614189 <+325>: lea 0x0(,%r12,8),%r12 0x0000555555614191 <+333>: add %rsi,%r12 0x0000555555614194 <+336>: mov %rbx,%rdi 0x0000555555614197 <+339>: callq 0x555555618980 <_D2rt4util9container6common__T10initializeTS2gc11gcinterface5RangeZQBlFNaNbNiKQBjZv> 0x000055555561419c <+344>: add $0x18,%rbx 0x00005555556141a0 <+348>: cmp %r12,%rbx 0x00005555556141a3 <+351>: jb 0x555555614194 <_D2gc4impl5protoQo7ProtoGC11removeRangeMFNbNiPvZv+336> 0x00005555556141a5 <+353>: jmp 0x5555556141cb <_D2gc4impl5protoQo7ProtoGC11removeRangeMFNbNiPvZv+391> 0x00005555556141a7 <+355>: xor %edi,%edi 0x00005555556141a9 <+357>: callq 0x555555607b1c <_D4core9exception__T11staticErrorTCQBhQBf16OutOfMemoryErrorTbZQBqFNaNbNibZQBo> 0x00005555556141ae <+362>: mov %rax,%rdi 0x00005555556141b1 <+365>: callq 0x5555555f5af4 <_d_throwdwarf> 0x00005555556141b6 <+370>: mov -0x40(%rbp),%rbx 0x00005555556141ba <+374>: mov -0x38(%rbp),%r12 0x00005555556141be <+378>: mov -0x30(%rbp),%r13 0x00005555556141c2 <+382>: mov -0x28(%rbp),%r14 0x00005555556141c6 <+386>: mov %rbp,%rsp 0x00005555556141c9 <+389>: pop %rbp 0x00005555556141ca <+390>: retq 0x00005555556141cb <+391>: mov %r13,0x8(%r14) 0x00005555556141cf <+395>: mov -0x40(%rbp),%rbx 0x00005555556141d3 <+399>: mov -0x38(%rbp),%r12 0x00005555556141d7 <+403>: mov -0x30(%rbp),%r13 0x00005555556141db <+407>: mov -0x28(%rbp),%r14 0x00005555556141df <+411>: mov %rbp,%rsp ---Type <return> to continue, or q <return> to quit--- 0x00005555556141e2 <+414>: pop %rbp 0x00005555556141e3 <+415>: retq 0x00005555556141e4 <+416>: mov $0x18,%eax 0x00005555556141e9 <+421>: add %rax,%rcx 0x00005555556141ec <+424>: lea (%r8,%r8,2),%rbx 0x00005555556141f0 <+428>: lea 0x0(,%rbx,8),%rbx 0x00005555556141f8 <+436>: add %r9,%rbx 0x00005555556141fb <+439>: cmp %rbx,%rcx 0x00005555556141fe <+442>: jb 0x55555561407d <_D2gc4impl5protoQo7ProtoGC11removeRangeMFNbNiPvZv+57> => 0x0000555555614204 <+448>: ud2 0x0000555555614206 <+450>: mov -0x40(%rbp),%rbx 0x000055555561420a <+454>: mov -0x38(%rbp),%r12 0x000055555561420e <+458>: mov -0x30(%rbp),%r13 0x0000555555614212 <+462>: mov -0x28(%rbp),%r14 0x0000555555614216 <+466>: mov %rbp,%rsp 0x0000555555614219 <+469>: pop %rbp 0x000055555561421a <+470>: retq End of assembler dump. My system: DMD: DMD64 D Compiler v2.080.1-dirty Manjaro Linux Kernel 4.14.48-2 Processor: core i7 I don't think it's my system since run.dlang.io gives this output: 2.061 to 2.078.1: Success and no output Since 2.079.0: Failure with output: Error: program killed by signal 4 So it looks like 2.079 that this issue cropped up. Thanks! --
Jun 15 2018