[Issue 10249] New: incorrect mangling for overloaded symbol

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun Jun 2 23:57:17 PDT 2013


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

           Summary: incorrect mangling for overloaded symbol
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Keywords: rejects-valid, wrong-code
          Severity: critical
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: k.hara.pg at gmail.com


--- Comment #0 from Kenji Hara <k.hara.pg at gmail.com> 2013-06-02 23:57:16 PDT ---
If a template takes alias parameter, X1 to X3 should be different instances
each other, but does not.

template X(alias f) {}

class C
{
    void foo(int) {}
    void foo(string) {}
}
alias X1 = X!(C.foo);
alias X2 = X!(__traits(getOverloads, C, "foo")[0]);
alias X3 = X!(__traits(getOverloads, C, "foo")[1]);

static assert(!__traits(isSame, X1, X2));   // fails, should pass
static assert(!__traits(isSame, X2, X3));   // pass
static assert(!__traits(isSame, X1, X3));   // pass

// Even more worse, mangled name of each instances is incorrect.
pragma(msg, X1.mangleof);   // 4test27__T1XS18_D4test1C3fooMFiZvZ
pragma(msg, X2.mangleof);   // 4test27__T1XS18_D4test1C3fooMFiZvZ
pragma(msg, X3.mangleof);   // 4test29__T1XS20_D4test1C3fooMFAyaZvZ

Currently X1 and X2 has same mangled name. If template X has actual code, the
instantiated code symbols would conflict at the link stage.

-- 
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