Bug 20153 – extern for aliased template instantiation

Status
NEW
Severity
enhancement
Priority
P4
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2019-08-22T15:08:26Z
Last change time
2024-12-13T19:05:06Z
Assigned to
No Owner
Creator
a11e99z
Moved to GitHub: dmd#19612 →

Comments

Comment #0 by black80 — 2019-08-22T15:08:26Z
I want to export non-mangled instantiated through alias template function. it can be useful for WASM, DLLs/SharedLibs and etc. but alias for template instatiation is ignored. pragma mangle to alias is ignored too. ----------------------------------- void main() {} export: // EXPORTed extern (C): // NO MANGLE but IGNORED public: void fun( Char )( Char* ) { } pragma (mangle, "func") // IGNORED alias func = fun!char; pragma( msg, func.mangleof ); pragma (mangle, "funw") // IGNORED alias funw = fun!wchar; pragma( msg, funw.mangleof ); ------------ OUTPUT ----------------------- _D9onlineapp__T3funTaZQhUNaNbNiNfPaZv _D9onlineapp__T3funTuZQhUNaNbNiNfPuZv current workaround: wrap template funcs to non-template. possible solution: if "alias" locates in non-mangle block (extern(C) for example) then do not mangle name and check that no others entities with same name exists in current context. OR/AND make "pragma mangle" working for alias-es too.
Comment #1 by robert.schadek — 2024-12-13T19:05:06Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/19612 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB