Bug 13289 – wchar and dchar C++ mangling is incorrect

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
x86_64
OS
Windows
Creation time
2014-08-13T06:02:00Z
Last change time
2014-08-29T08:38:04Z
Assigned to
nobody
Creator
dra.open

Comments

Comment #0 by dra.open — 2014-08-13T06:02:44Z
Version: 2.065, 2.066.0-rc2 When I use written by C++ libraries, compiled by MSVC++ libs are directly linkable if x64 environment and enclosed in extern(C++). I think dmd's name mangling is incorrect. test.d extern(C++){ void fc2(wchar){} void fc4(dchar){} } test.cpp void fc2(wchar_t){} obj by test.cpp cl 17.00.50727.1 (MSVC++) x86/x64 void fc2(wchar_t) ?fc2@@YAX_W@Z void __cdecl fc2(wchar_t) // msvc dmc 8.42n x86 void fc2(wchar_t) ?fc2@@YAX_Y@Z void __cdecl fc2(wchar_t) // dmc obj by test.d dmd 2.065 x86/x64 void fc2(wchar) ?fc2@@YAX_Y@Z void __cdecl fc2(wchar_t) // dmc void fc4(dchar) ?fc4@@YAXK@Z void __cdecl fc4(unsigned long) dmd 2.066.0-rc2 x86 void fc2(wchar) ?fc2@@YAXG@Z void __cdecl fc2(unsigned short) void fc4(dchar) ?fc4@@YAX_Y@Z void __cdecl fc2(wchar_t) // dmc dmd 2.066.0-rc2 x64 void fc2(wchar) ?fc2@@YAXG@Z void __cdecl fc2(unsigned short) void fc4(dchar) ?fc4@@YAX_W@Z void __cdecl fc4(wchar_t) // msvc desired mangle x86 (linkable obj by dmc) void fc2(wchar) ?fc2@@YAX_Y@Z void __cdecl fc2(wchar_t) // dmc void fc4(dchar) ?fc4@@YAXK@Z void __cdecl fc4(unsigned long) desired mangle x64 (linkable obj by msvc) void fc2(wchar) ?fc2@@YAX_W@Z void __cdecl fc2(wchar_t) // msvc void fc4(dchar) ?fc4@@YAXK@Z void __cdecl fc4(unsigned long) 2.0660-rc2 is wronger than 2.065 I think use wchar_t as wchar.
Comment #1 by github-bugzilla — 2014-08-29T08:38:04Z
Commit pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/cc89ff653e3eacd3c61643927c0c5f77af90a316 fix Issue 13289 - wchar and dchar C++ mangling is incorrect Conflicts: test/runnable/cppa.d test/runnable/extra-files/cppb.cpp