[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