[Issue 9130] New: Wrong codegen for comile time constructed struct

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun Dec 9 16:21:08 PST 2012


http://d.puremagic.com/issues/show_bug.cgi?id=9130

           Summary: Wrong codegen for comile time constructed struct
           Product: D
           Version: D2
          Platform: x86
        OS/Version: All
            Status: NEW
          Severity: critical
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: samukha at voliacable.com


--- Comment #0 from Max Samukha <samukha at voliacable.com> 2012-12-09 16:21:05 PST ---
This is the minimal test case I have for now. Wrong value is generated for the
'name' member causing the following to segfault at runtime (1):

struct S
{
    void bar()
    {
    }
}

struct Meta
{
    string name;

    void construct(alias m)()
    {
        name = "bar";
    }
}   

struct Function
{
    Meta super_;
    alias super_ this;
    bool break_;

    void construct(alias f)()
    {
        super_.construct!f();                
    }

    void dynConstruct(alias f)()
    {    
        if (!break_)
        {   
            break_ = true;         
            meta!(__traits(getOverloads, S, "bar")[0]);
        }
    }
}

@property void meta(alias m)()
{
    static Function md = function()
        {                            
            Function r;
            r.construct!m();
            return r;
        }();                                                                   

    assert(md.name == "bar"); // (1)
    md.dynConstruct!m();
}

void main()
{
    meta!(S.bar);
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list