digitalmars.D.bugs - [Issue 1134] New: incorrect calling convention used
- d-bugmail puremagic.com (55/55) Apr 12 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1134
- d-bugmail puremagic.com (6/6) Apr 12 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1134
- d-bugmail puremagic.com (6/6) Apr 12 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1134
- d-bugmail puremagic.com (9/9) Apr 20 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1134
- d-bugmail puremagic.com (8/8) Apr 23 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1134
http://d.puremagic.com/issues/show_bug.cgi?id=1134 Summary: incorrect calling convention used Product: D Version: 1.011 Platform: PC OS/Version: Windows Status: NEW Keywords: wrong-code Severity: major Priority: P1 Component: DMD AssignedTo: bugzilla digitalmars.com ReportedBy: CppCoder gmail.com the following code compiles to the asm after it. Notice that only two parameters are pushed in the call to dllMain, when there should be three. int main( char [][]args ) { uint a; uint b; uint c; extern (Windows) BOOL function( HMODULE hinstDLL, DWORD fdwReason, LPVOID lpvReserved ) dllMain; a = 1; b = 2; c = 3; dllMain = cast(typeof(dllMain))(a + b); asm { int 3; } //as a reference point dllMain( cast(HMODULE)c, DLL_PROCESS_ATTACH, null ); return 0; } 00402010 /$ C8 100000 ENTER 10,0 00402014 |. 53 PUSH EBX 00402015 |. CC INT3 00402016 |. 31C0 XOR EAX,EAX 00402018 |. 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX 0040201B |. 8945 F4 MOV DWORD PTR SS:[EBP-C],EAX 0040201E |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX 00402021 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX 00402024 |. B9 01000000 MOV ECX,1 00402029 |. 894D F0 MOV DWORD PTR SS:[EBP-10],ECX 0040202C |. BA 02000000 MOV EDX,2 00402031 |. 8955 F4 MOV DWORD PTR SS:[EBP-C],EDX 00402034 |. C745 F8 030000>MOV DWORD PTR SS:[EBP-8],3 0040203B |. 8D1C11 LEA EBX,DWORD PTR DS:[ECX+EDX] 0040203E |. 895D FC MOV DWORD PTR SS:[EBP-4],EBX 00402041 |. CC INT3 00402042 |. FF75 F8 PUSH DWORD PTR SS:[EBP-8] ;push #1 (c) 00402045 |. 51 PUSH ECX ;push #2 (DLL_PROCESS_ATTACH) 00402046 |. FF55 FC CALL DWORD PTR SS:[EBP-4] ;call dllMain 00402049 |. 31C0 XOR EAX,EAX 0040204B |. 5B POP EBX 0040204C |. C9 LEAVE 0040204D \. C3 RETN --
Apr 12 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1134 ------- Comment #1 from CppCoder gmail.com 2007-04-12 16:32 ------- Created an attachment (id=138) --> (http://d.puremagic.com/issues/attachment.cgi?id=138&action=view) test case --
Apr 12 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1134 ------- Comment #2 from davidl 126.com 2007-04-12 22:12 ------- It's because extern(windows) doesn't take effect on the calling convention I think. EAX is 0 and optimized --
Apr 12 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1134 bugzilla digitalmars.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED ------- Comment #3 from bugzilla digitalmars.com 2007-04-20 13:20 ------- Fixed DMD 1.013 --
Apr 20 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1134 thomas-dloop kuehne.cn changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |thomas-dloop kuehne.cn ------- Comment #4 from thomas-dloop kuehne.cn 2007-04-23 12:54 ------- *** Bug 957 has been marked as a duplicate of this bug. *** --
Apr 23 2007