is this an instance of the 16-byte struct bug
John Colvin
john.loughran.colvin at gmail.com
Tue Nov 5 01:36:22 PST 2013
On Tuesday, 5 November 2013 at 09:34:47 UTC, John Colvin wrote:
> On Monday, 4 November 2013 at 22:09:45 UTC, jerro wrote:
>>>> void main() {
>>>> auto s = CFS(1.0); // crash
>>>> //auto s = CFS(1, Y()); // crash
>>>> //auto s = CFS(1, Y([])); // works
>>>> writeln(s);
>>>> }
>>>
>>> What do you mean by crash ?
>>
>> It's segfaults. It doesn't happen if you change 1.0 literal to
>> some other value,
>> say 2.0. It's a truly bizarre bug.
>>
>> Here's a slightly simplified case:
>>
>> import std.stdio;
>>
>> struct Y {
>> int[] _data;
>> }
>>
>> struct CFS {
>> double x;
>> Y growth;
>> }
>>
>> void main() {
>> auto s = CFS(2.0);
>> writefln("%x", s.growth._data.length); // prints
>> 3ff0000000000000
>> }
>>
>> It doesn't happen with -O, or when compiled with LDC or GDC.
>
> Can't reproduce on Git master x86_64 linux. Prints 0 no matter
> what flags are used.
Oh wait no, sorry. It does print 3ff0000000000000 if I use 1.0
instead of 2.0
More information about the Digitalmars-d
mailing list