Segfault with std.container.Array but not regular dynamic array

Dan dbdavidson at yahoo.com
Thu Nov 29 04:38:01 PST 2012


On Thursday, 29 November 2012 at 07:59:02 UTC, Maxim Fomin wrote:

> This doesn't look like assembly for previous source. Please 
> provide the source for which you have assembly and tell which 
> dmd options do you use.

Well, I'm using the latest dmd (from the trunk), phobos, 
druntime, so I could build and step through.

rdmd -version=bug --force --build-only -g -w -property 
-I/home/dbdavidson/stage/vibe.d/source 
-I/home/dbdavidson/plusauri/dlang -L-levent_pthreads -L-levent 
-L-lssl -L-lcrypto /home/dbdavidson/tmp/again.d

dmd -v
DMD v2.061 DEBUG
DMD64 D Compiler v2.061

-----------------------
import core.stdc.stdio : printf;

struct S {
   long x = 42;
   version(bug) {
     void opAssign(S rhs)
     {
       printf("Assign %d\n", this.x);
     }
   }
}

//alias RefCounted!(int) Foo;
alias S Foo;
Foo[int] map;

void main() {
   map[3] = Foo();
   printf("%d\n", map[3].x);
}

------------------------

(gdb) disass
Dump of assembler code for function _Dmain:
    0x000000000041a630 <+0>:	push   %rbp
    0x000000000041a631 <+1>:	mov    %rsp,%rbp
    0x000000000041a634 <+4>:	sub    $0x38,%rsp
    0x000000000041a638 <+8>:	push   %rbx
=> 0x000000000041a639 <+9>:	mov    $0x3,%eax
    0x000000000041a63e <+14>:	mov    %eax,-0x30(%rbp)
    0x000000000041a641 <+17>:	lea    -0x30(%rbp),%rcx
    0x000000000041a645 <+21>:	movabs $0x8,%rdx
    0x000000000041a64f <+31>:	movabs $0x43cc10,%rsi
    0x000000000041a659 <+41>:	mov    %fs:0x0,%rdi
    0x000000000041a662 <+50>:	add    0x229957(%rip),%rdi        # 
0x643fc0
    0x000000000041a669 <+57>:	callq  0x41ae84 <_aaGetX>
    0x000000000041a66e <+62>:	mov    %rax,-0x28(%rbp)
    0x000000000041a672 <+66>:	test   %rax,%rax
    0x000000000041a675 <+69>:	jne    0x41a681 <_Dmain+81>
    0x000000000041a677 <+71>:	mov    $0x12,%edi
    0x000000000041a67c <+76>:	callq  0x41a710 <_D5again7__arrayZ>
    0x000000000041a681 <+81>:	movabs $0x2a,%rax
    0x000000000041a68b <+91>:	mov    %rax,-0x18(%rbp)
    0x000000000041a68f <+95>:	mov    %rax,%rsi
    0x000000000041a692 <+98>:	lea    -0x20(%rbp),%rdi
    0x000000000041a696 <+102>:	callq  0x41a5c8 
<_D5again1S8opAssignMFS5again1SZv>
    0x000000000041a69b <+107>:	mov    -0x20(%rbp),%rcx
    0x000000000041a69f <+111>:	mov    -0x28(%rbp),%rdx
    0x000000000041a6a3 <+115>:	mov    %rcx,(%rdx)



More information about the Digitalmars-d-learn mailing list