September 05, 2006 [Issue 324] New: DMD Optimization Bug (access violation due to bad stack pointer) | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=324 Summary: DMD Optimization Bug (access violation due to bad stack pointer) Product: D Version: 0.165 Platform: PC OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla@digitalmars.com ReportedBy: iceelyne@gmail.com file dbug1.d import std.stdio; import std.process; void[] buildKey(char[] a, int b) { return cast(void[])a~(cast(void*)&b)[0..4]; } bool[void[]] reg; void addToReg(void[] a, int b, bool v) { //if(!v) throw new Exception(""); if(!v) writefln("X"); void[] key = a~(cast(void*)&b)[0..4]; reg[key] = v; writefln("OK"); } int main(char[][] args) { addToReg("test", 1024, true); system("pause"); return 0; } compile with dmd -release -O -g dbug1.d dmd 0.163~0.166 here is some windbg view: ======== bug: void addToReg(void[] a, int b, bool v) { //if(!v) throw new Exception(""); if(!v) writefln("X"); void[] key = a~(cast(void*)&b)[0..4]; reg[key] = v; writefln("OK"); } _D5dbug18addToRegFAvixZv: 0x00402034 83ec0c sub esp,0c 0x00402037 53 push ebx 0x00402038 89442408 mov dword ptr [esp+08],eax 0x0040203c 807c240800 cmp byte ptr [esp+08],00 0x00402041 7520 jne _D5dbug18addToRegFAvixZv+0000002f (00402063) 0x00402043 ff358c504100 push dword ptr [_TMP0+00000004 (0041508c)] 0x00402049 ff3588504100 push dword ptr [_TMP0 (00415088)] 0x0040204f ff3514514100 push dword ptr [_arguments_Aa+00000004 (00415114)] 0x00402055 ff3510514100 push dword ptr [_arguments_Aa (00415110)] 0x0040205b e8c80a0000 call _D3std5stdio8writeflnFYv (00402b28) 0x00402060 83c410 add esp,10 ;jne to here: 0x00402063 8a442408 mov al,byte ptr [esp+08] 0x00402067 50 push eax ;mal-manipulation of esp: 0x00402068 29dc sub esp,ebx 0x0040206a bb04000000 mov ebx,00000004 ;fix: ;mov ebx, 0x4 ;sub esp, ebx ;access violation due to bad esp: 0x0040206f 6a01 push 01 0x00402071 8d4c2420 lea ecx,dword ptr [esp+20] 0x00402075 51 push ecx 0x00402076 53 push ebx 0x00402077 ff742430 push dword ptr [esp+30] 0x0040207b ff742430 push dword ptr [esp+30] 0x0040207f e810080000 call __d_arraycat (00402894) ======== ok: void addToReg(void[] a, int b, bool v) { //if(!v) throw new Exception(""); if(!v) writefln("X"); void[] key = a~(cast(void*)&b)[0..3]; reg[key] = v; writefln("OK"); } 0x00402063 8a442408 mov al,byte ptr [esp+08] 0x00402067 bb03000000 mov ebx,00000003 0x0040206c 50 push eax ; 0x0040206d 83ec04 sub esp,04 0x00402070 6a01 push 01 0x00402072 8d4c2420 lea ecx,dword ptr [esp+20] 0x00402076 51 push ecx 0x00402077 53 push ebx 0x00402078 ff742430 push dword ptr [esp+30] 0x0040207c ff742430 push dword ptr [esp+30] 0x00402080 e80f080000 call __d_arraycat (00402894) -- |
September 19, 2006 [Issue 324] DMD Optimization Bug (access violation due to bad stack pointer) | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=324 bugzilla@digitalmars.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED ------- Comment #1 from bugzilla@digitalmars.com 2006-09-19 15:28 ------- Fixed in DMC 0.167. -- |
Copyright © 1999-2021 by the D Language Foundation