digitalmars.D.bugs - [Issue 14831] New: Each function local symbols should have unique
- via Digitalmars-d-bugs (55/55) Jul 26 2015 https://issues.dlang.org/show_bug.cgi?id=14831
https://issues.dlang.org/show_bug.cgi?id=14831 Issue ID: 14831 Summary: Each function local symbols should have unique mangled name Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: major Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: k.hara.pg gmail.com Blocks: 9748, 10619, 14820 Typical example: module test; void main() { { int x; pragma(msg, x.mangleof); } // _D4test4mainFZ1xi { int x; pragma(msg, x.mangleof); } // _D4test4mainFZ1xi } Even if two or more different function local symbols have same name, their mangled name should be unique. --- Currently the mangling issue causes many pragmatic problems. https://issues.dlang.org/show_bug.cgi?id=10619 If the same name symbols are captured by TemplateAliasParameter, the corresponding template instances will be entangled. https://issues.dlang.org/show_bug.cgi?id=14820 If the symbols declared in unrolled loop (compile-time iterated foreach) statement, they're easily entangled. https://issues.dlang.org/show_bug.cgi?id=9748 The problem is not only for variables, but also function local templates and template functions. --- Currently function local functions, type definitions, and static variables are not allowed. module test; void main() { { void f() {} pragma(msg, f.mangleof); } { void f() {} pragma(msg, f.mangleof); } // error { struct S {} pragma(msg, S.mangleof); } { struct S {} pragma(msg, S.mangleof); } // ICE { class C {} pragma(msg, C.mangleof); } { class C {} pragma(msg, C.mangleof); } // ICE { enum E { a } pragma(msg, E.mangleof); } { enum E { a } pragma(msg, E.mangleof); } // error { static int v = 0; pragma(msg, v.mangleof); } { static int v = 1; pragma(msg, v.mangleof); } // error } However, I think the rejections are not so meaningful. I cannot see any reason to limit such the static function local symbols to unique. --
Jul 26 2015