is this an instance of the 16-byte struct bug
jerro
a at a.com
Mon Nov 4 15:14:07 PST 2013
On Monday, 4 November 2013 at 23:07:27 UTC, deadalnix wrote:
> On Monday, 4 November 2013 at 22:56:48 UTC, jerro wrote:
>>> Then it look like a dmd backend bug. Can you post the
>>> generated assembly ?
>>
>> 000000000043050c <_Dmain>:
>> 43050c: push %rbp
>> 43050d: mov %rsp,%rbp
>> 430510: sub $0x40,%rsp
>> 430514: movabs $0x3ff0000000000000,%rax
>> 43051b:
>> 43051e: mov %rax,-0x40(%rbp)
>> 430522: movsd -0x40(%rbp),%xmm0
>> 430527: rex.W movsd %xmm0,-0x30(%rbp)
>> 43052d: xor %edx,%edx
>> 43052f: mov %rax,-0x10(%rbp)
>> 430533: mov %rdx,-0x8(%rbp)
>> 430537: mov %rax,-0x28(%rbp)
>> 43053b: mov %rdx,-0x20(%rbp)
>
>> 43053f: mov 0x28022(%rip),%rdx
>> 430546: mov 0x28013(%rip),%rsi
>
> What are these ? What are they referering to
My guess is they are refering to length and
ptr for "%x" string literal, which is passed to writefln.
>
>> 43054d: mov -0x28(%rbp),%rdi
>> 430551: callq 430874 <void
>> std.stdio.writefln!(immutable(char)[],
>> ulong).writefln(immutable(char)[], ulong)>
>> 430556: xor %eax,%eax
>> 430558: leaveq
>> 430559: retq
>
> This calls writefln, this is not what your code does just
> above. Are you sure you are posting the right assembly ? Do you
> use the inline flag ?
I think you are confusing my post with some other post (I am not
OP).
My code sample was:
import std.stdio;
struct Y {
int[] _data;
}
struct CFS {
double x;
Y growth;
}
void main() {
auto s = CFS(1.0);
writefln("%x", s.growth._data.length); // prints
3ff0000000000000
}
The constructor's argument was 2.0 in my previous sample, but it
should have been 1.0.
More information about the Digitalmars-d
mailing list