Аномалии компиляторов

From Wiki.conus.info

Jump to: navigation, search

Intel C++ 10.1 которым скомпилирован Oracle RDBMS 11.2 Linux86, может сгенерировать два JZ идущих подряд, причем на второй нет ссылки ниоткуда. Второй JZ таким образом, не имеет никакого смысла.

Например, kdli.o из libserver11.a:

.text:08114CF1                   loc_8114CF1:                            ; CODE XREF: __PGOSF539_kdlimemSer+89A�j
.text:08114CF1                                                           ; __PGOSF539_kdlimemSer+3994�j
.text:08114CF1 8B 45 08                          mov     eax, [ebp+arg_0]
.text:08114CF4 0F B6 50 14                       movzx   edx, byte ptr [eax+14h]
.text:08114CF8 F6 C2 01                          test    dl, 1
.text:08114CFB 0F 85 17 08 00 00                 jnz     loc_8115518
.text:08114D01 85 C9                             test    ecx, ecx
.text:08114D03 0F 84 8A 00 00 00                 jz      loc_8114D93
.text:08114D09 0F 84 09 08 00 00                 jz      loc_8115518
.text:08114D0F 8B 53 08                          mov     edx, [ebx+8]
.text:08114D12 89 55 FC                          mov     [ebp+var_4], edx
.text:08114D15 31 C0                             xor     eax, eax
.text:08114D17 89 45 F4                          mov     [ebp+var_C], eax
.text:08114D1A 50                                push    eax
.text:08114D1B 52                                push    edx
.text:08114D1C E8 03 54 00 00                    call    len2nbytes
.text:08114D21 83 C4 08                          add     esp, 8

Еще там же:

.text:0811A2A5                   loc_811A2A5:                            ; CODE XREF: kdliSerLengths+11C�j
.text:0811A2A5                                                           ; kdliSerLengths+1C1�j
.text:0811A2A5 8B 7D 08                          mov     edi, [ebp+arg_0]
.text:0811A2A8 8B 7F 10                          mov     edi, [edi+10h]
.text:0811A2AB 0F B6 57 14                       movzx   edx, byte ptr [edi+14h]
.text:0811A2AF F6 C2 01                          test    dl, 1
.text:0811A2B2 75 3E                             jnz     short loc_811A2F2
.text:0811A2B4 83 E0 01                          and     eax, 1
.text:0811A2B7 74 1F                             jz      short loc_811A2D8
.text:0811A2B9 74 37                             jz      short loc_811A2F2
.text:0811A2BB 6A 00                             push    0
.text:0811A2BD FF 71 08                          push    dword ptr [ecx+8]
.text:0811A2C0 E8 5F FE FF FF                    call    len2nbytes

Возможно, это ошибка его кодегенератора, не выявленная тестами (ведь результирующий код и так работает нормально).

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox