www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 13365] New: Anonymous union template mixin data layout

https://issues.dlang.org/show_bug.cgi?id=13365

          Issue ID: 13365
           Summary: Anonymous union template mixin data layout
           Product: D
           Version: D2
          Hardware: All
                OS: Linux
            Status: NEW
          Severity: major
          Priority: P1
         Component: DMD
          Assignee: nobody puremagic.com
          Reporter: safety0ff.bugz gmail.com

The following crashes at different places with 2.065 and 2.066.
The bug doesn't seem to affect LDC.

mixin template MT(string id) {
    union
    {
        mixin("void* dummy"~id~";");
    }
}

struct S {
    int i;
    mixin MT!"x";
    mixin MT!"y";
}
import std.stdio;
void main()
{
    S s = void;
    s.i = 1;
    s.i.offsetof.writeln;
    assert(s.i == 1);
    s.dummyx = null;
    s.dummyx.offsetof.writeln;
    assert(s.i == 1);
    s.dummyy = null;
    s.dummyy.offsetof.writeln;
    assert(s.i == 1);
    char a,b;
    s.dummyx = cast(void*)&a;
    assert(s.dummyx is &a);
    assert(s.dummyy is null);
    s.dummyy = cast(void*)&b;
    assert(s.dummyx is &a);
    assert(s.dummyy is &b);
}

--
Aug 22 2014