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)