is this an instance of the 16-byte struct bug

John Colvin john.loughran.colvin at gmail.com
Tue Nov 5 01:34:45 PST 2013


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.


More information about the Digitalmars-d mailing list