I tested it on linux (64-bit distro), and it segfaults as well:

-----

$ echo "struct S { ushort a, b; ubyte c, d; } struct T { ushort e; S s; }" > test.d

$ dmd -v test.d
binary    dmd
version   v2.069.0
config    /etc/dmd.conf
parse     test
importall test
import    object        (/usr/include/dmd/druntime/import/object.d)
semantic  test
Segmentation fault

$ uname -r
3.13.0-37-generic

$ cat /etc/issue
Linux Mint 17.1 Rebecca \n \l

$ dmd --version
DMD64 D Compiler v2.069.0
Copyright (c) 1999-2015 by Digital Mars written by Walter Bright

-----

It doesn't crash if compiled in 32-bit:

-----

$ dmd -v -m32 test.d
binary    dmd
version   v2.069.0
config    /etc/dmd.conf
parse     test
importall test
import    object        (/usr/include/dmd/druntime/import/object.d)
semantic  test
semantic2 test
semantic3 test
code      test
gcc test.o -o test -m32 -L/usr/lib/i386-linux-gnu -Xlinker --export-dynamic -Xlinker -Bstatic -lphobos2 -Xlinker -Bdynamic -lpthread -lm -lrt -ldl /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib32/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: error: ld returned 1 exit status
--- errorlevel 1

-----

Using ubyte[2] or swapping the fields also solve the issue as mentioned above.

I also reproduce the issue using DMD v2.069.2.

So it may be good to add that information in the bug-report.


Reply via email to