Re: [Bug] VS2015 + vectorcall = crash?
От: Pavel Dvorkin Россия  
Дата: 15.09.16 16:13
Оценка: 10 (1)
Здравствуйте, okman, Вы писали:

O>Обнаружил в Visual C++ 2015 странное поведение. Баг?


В x64 работает нормально.
В x86 вылетает на последней команде


В x64 этот код выглядит так

00007FF61979232F mov rcx,qword ptr [p]
00007FF619792333 call qword ptr [Pfn]

00007FF61979109B jmp parent::`vcall'{8}' (07FF619791A94h)


00007FF619791A94 mov rax,qword ptr [rcx]
00007FF619791A97 jmp qword ptr [rax+8]


В x86

00E82390 mov ecx,dword ptr [p]
00E82393 call dword ptr [Pfn]

00E8107D jmp parent::`vcall'{4}' (0E81A3Fh)

00E81A3F mov eax,dword ptr [esp+4]
00E81A43 mov eax,dword ptr [eax]
00E81A45 jmp dword ptr [eax+4] // здесь и падает

Зачем она в стек полезла, если [p] в регистре ecx —

Если заменить __vectorcall на __fastcall, то вместо последних 3 строк имеем

00251A3F mov eax,dword ptr [ecx]
00251A41 jmp dword ptr [eax+4]

что и должно быть.

Видимо, баг, да.
With best regards
Pavel Dvorkin
Отредактировано 15.09.2016 16:21 Pavel Dvorkin . Предыдущая версия . Еще …
Отредактировано 15.09.2016 16:20 Pavel Dvorkin . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.