https://issues.dlang.org/show_bug.cgi?id=15629
--- Comment #2 from Ivan Kazmenko <[email protected]> --- Turned out that array b is also not necessary. A bit less code (testmodule2.d): ----- import std.math; import std.stdio; void main () { int [] a = [3]; int value = abs (a[0]); if (a[0] != 3) { writeln (value, " ", a); assert (false); } } ----- Disassembly: ----- __Dmain PROC NEAR ; COMDEF __Dmain sub esp, 36 ; 0000 _ 83. EC, 24 mov eax, 3 ; 0003 _ B8, 00000003 mov ecx, 1 ; 0008 _ B9, 00000001 mov dword ptr [esp+0CH], ebx ; 000D _ 89. 5C 24, 0C mov dword ptr [esp+10H], esi ; 0011 _ 89. 74 24, 10 mov dword ptr [esp+18H], eax ; 0015 _ 89. 44 24, 18 mov dword ptr [esp+4H], ecx ; 0019 _ 89. 4C 24, 04 mov dword ptr [esp], offset FLAT:_D11TypeInfo_Ai6__initZ; 001D _ C7. 04 24, 00000000(segrel) call __d_arrayliteralTX ; 0024 _ E8, 00000000(rel) mov edx, eax ; 0029 _ 89. C2 mov eax, dword ptr [esp+18H] ; 002B _ 8B. 44 24, 18 mov dword ptr [esp+20H], edx ; 002F _ 89. 54 24, 20 mov ebx, dword ptr [esp+20H] ; 0033 _ 8B. 5C 24, 20 mov ecx, dword ptr [esp+14H] ; 0037 _ 8B. 4C 24, 14 mov dword ptr [edx], eax ; 003B _ 89. 02 mov esi, dword ptr [ebx] ; 003D _ 8B. 33 mov eax, esi ; 003F _ 89. F0 sar eax, 31 ; 0041 _ C1. F8, 1F xor esi, eax ; 0044 _ 33. F0 sub esi, eax ; 0046 _ 2B. F0 mov dword ptr [esp+1CH], 1 ; 0048 _ C7. 44 24, 1C, 00000001 cmp ecx, 3 ; 0050 _ 83. F9, 03 jz ?_0056 ; 0053 _ 74, 24 push esi ; 0055 _ 56 mov edx, offset FLAT:?_0001 ; 0056 _ BA, 00000000(segrel) mov ebx, 1 ; 005B _ BB, 00000001 push edx ; 0060 _ 52 push ebx ; 0061 _ 53 push dword ptr [esp+2CH] ; 0062 _ FF. 74 24, 2C push dword ptr [esp+2CH] ; 0066 _ FF. 74 24, 2C call _D3std5stdio21__T7writelnTiTAyaTAiZ7writelnFNfiAyaAiZv; 006A _ E8, 00000000(rel) mov eax, 11 ; 006F _ B8, 0000000B call _D11testmodule28__assertFiZv ; 0074 _ E8, 00000000(rel) ?_0056: mov ebx, dword ptr [esp+0CH] ; 0079 _ 8B. 5C 24, 0C mov esi, dword ptr [esp+10H] ; 007D _ 8B. 74 24, 10 add esp, 36 ; 0081 _ 83. C4, 24 xor eax, eax ; 0084 _ 31. C0 ret ; 0086 _ C3 __Dmain ENDP ----- Now the lines supposed to carry the "3" seem to be ----- mov eax, 3 ; 0003 _ B8, 00000003 mov dword ptr [esp+18H], eax ; 0015 _ 89. 44 24, 18 mov eax, dword ptr [esp+18H] ; 002B _ 8B. 44 24, 18 mov dword ptr [edx], eax ; 003B _ 89. 02 ----- and then for some reason ----- mov ecx, dword ptr [esp+14H] ; 0037 _ 8B. 4C 24, 14 cmp ecx, 3 ; 0050 _ 83. F9, 03 jz ?_0056 ; 0053 _ 74, 24 ----- --
