April 07, 2017 [Issue 17302] New: [SPEC] QualifiedName mangling does not match compiler. | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=17302 Issue ID: 17302 Summary: [SPEC] QualifiedName mangling does not match compiler. Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: normal Priority: P1 Component: dmd Assignee: nobody@puremagic.com Reporter: ibuclaw@gdcproject.org I think I saw this somewhere, but couldn't find the bug report. Nested functions have their parent's parameters encoded into the mangle symbol. --- void foo() { void bar() { } pragma(msg, bar.mangleof); } --- _D4test3fooFZ3barMFNaNbNiNfZv Where 'FZ' is inserted between 3foo and 3bar. This is contrary to the spec (removed irrelevant bits that match template and internal symbols): --- MangledName: _D QualifiedName M Type QualifiedName: SymbolName SymbolName QualifiedName SymbolName: LName LName: Number Name --- >From the spec, I can only infer that the symbol should be: _D4test3foo3barMFNaNbNiNfZv Otherwise a special rule needs to be added to handle functions in SymbolName as well as TemplateInstanceName. But that will just cause grammar ambiguities with LName. SymbolName: FunctionName LName FunctionName: Number Name Type LName: Number Name Well... there's *already* a grammar ambiguity as #14591 is somewhat related. -- |
Copyright © 1999-2021 by the D Language Foundation