http://bugs.winehq.org/show_bug.cgi?id=8170
------- Additional Comments From focht@gmx.net 2007-27-04 04:03 ------- Hello,
another one, probably same category ...
--- snip --- trace:msvcrt:__unDNameEx (0x34e440,??$?5DU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAD@Z,256,0x6139c960,0x6139c9a0,(nil),1800) trace:msvcrt:get_literal_string Failed at '?' in ?5DU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAD@Z xe: undname.c:186: str_array_push: Assertion `ptr' failed. wine: Assertion failed at address 0x7b2a48b2 (thread 0009), starting debugger... --- snip ---
Should be:
--- snip undname.exe ---
Undecoration of :- "??$?5DU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$c har_traits@D@std@@@0@AAV10@AAD@Z"
is :- "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl s td::operator>><char,struct std::char_traits<char> >(class std::basic_istream<cha r,struct std::char_traits<char> > &,char &)"
--- snip undname.exe ---
As workaround i currently force the debugger to use native version and let the debuggee use the builtin one (if needed).
How about automating the "compliance" testing between Micro$oft undname and wine's version? E.g. a little tool which loads both, the builtin version and the native one by late binding (LoadLibrary/GetProcAddress), feeds both with same input and compare the outputs against each other? Dll names should be supplied on command line to get different msvcrt versions tested.
Throw large quantities of binaries (.exe, .dlls) which export decorated symbols at this tool. E.g. a script which recursively scans filesystem, pick of any dll, dump exports, pass it to both demangle calls and compare outputs. Guard the demangle calls with SEH.
That way you get a much "real world" test cases than msvcrt cpp test.
Regards