www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 10786] New: non-trivial RTInfo generation causes link error

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

           Summary: non-trivial RTInfo generation causes link error
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Keywords: wrong-code
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: r.sagitario gmx.de


--- Comment #0 from Rainer Schuetze <r.sagitario gmx.de> 2013-08-09 01:19:55
PDT ---
Change the RTInfo declaration in object.di and object_.d to

////////////////////////////////////////////////////////
template RTInfo(T)
{
    enum RTInfo = cast(void*)RTInfoImpl!T;
}
template RTInfoImpl(T)
{
    enum RTInfoImpl = &RTInfoImpl2!T;
}

template RTInfoImpl2(T)
{
    immutable RTInfoImpl2 = 1234;
}
////////////////////////////////////////////////////////

and then compile these 2 files:

/////////////////////////////////////
module ut;

void main() {}
/////////////////////////////////////
module ut2;

unittest
{
    // Original test case (revised, original assert was wrong)
    int[string] a;
    a["foo"] = 0;
    a.remove("foo");
    assert(a == null);  // should not crash
}
/////////////////////////////////////

with

dmd -unittest ut.d ut2.d

results in:

OPTLINK (R) for Win32  Release 8.00.12
Copyright (C) Digital Mars 1989-2010  All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
ut.obj(ut)
 Error 42: Symbol Undefined
_D6object74__T11RTInfoImpl2TS6object28__T16Associati
veArrayTAyaTiZ16AssociativeArrayZ11RTInfoImpl2yi
--- errorlevel 1

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