Some of my code broken in DMD 2.060. I need packed struct without align to process data. Is this bug or something changed in 2.060 ? Code http://dpaste.dzfl.pl/212ca53b :
import std.stdio; align(1) struct S1 { char[2] c; //+0 uint u; //+2 } struct S2 { align(1): char[2] c; //+0 uint u; //+2 } struct S3 { align(1) char[2] c; //+0 align(1) uint u; //+2 } void main() { writeln("**** compiler ",__VENDOR__, " ", __VERSION__); writeln; writeln("S1.c.offsetof (should be 0) = ", S1.c.offsetof); writeln("S1.u.offsetof (should be 2) = ", S1.u.offsetof); writeln("S1.sizeof (should be 6) = ", S1.sizeof); writeln; writeln("S2.c.offsetof (should be 0) = ", S2.c.offsetof); writeln("S2.u.offsetof (should be 2) = ", S2.u.offsetof); writeln("S2.sizeof (should be 6) = ", S2.sizeof); writeln; writeln("S3.c.offsetof (should be 0) = ", S3.c.offsetof); writeln("S3.u.offsetof (should be 2) = ", S3.u.offsetof); writeln("S3.sizeof (should be 6) = ", S3.sizeof); writeln; } Output: **** compiler Digital Mars D 2059 S1.c.offsetof (should be 0) = 0 S1.u.offsetof (should be 2) = 2 S1.sizeof (should be 6) = 6 S2.c.offsetof (should be 0) = 0 S2.u.offsetof (should be 2) = 2 S2.sizeof (should be 6) = 6 S3.c.offsetof (should be 0) = 0 S3.u.offsetof (should be 2) = 2 S3.sizeof (should be 6) = 6 **** compiler Digital Mars D 2060 S1.c.offsetof (should be 0) = 0 S1.u.offsetof (should be 2) = 4 S1.sizeof (should be 6) = 8 S2.c.offsetof (should be 0) = 0 S2.u.offsetof (should be 2) = 2 S2.sizeof (should be 6) = 8 S3.c.offsetof (should be 0) = 0 S3.u.offsetof (should be 2) = 2 S3.sizeof (should be 6) = 8