Ниже приведен воспроизводимый пример:
AnyFutureWithInnerPromise<void> f()
{
char arr[16]; // crash here due to segmentation fault
co_return;
}
int main()
{
f().get();
}
GDB говорит мне, аварийная строка:
movaps XMMWORD PTR [rcx+0xb8],xmm0
Причина в том, что movaps
требует, чтобы его операнды были выровнены по 128 битам, но XMMWORD PTR [rcx+0xb8]
это не тот случай.
Если я изменю код следующим образом:
AnyFutureWithInnerPromise<void> f()
{
std::uint64_t n; // add 8-bytes to make arr 128-bit aligned
char arr[16]; // ok now
co_return;
}
Новая инструкция по сборке:
movaps XMMWORD PTR [rcx+0xc0],xmm0
Это ошибка в реализации Coroutines TS, поставляемой с Clang 6.0?
Задача ещё не решена.
Других решений пока нет …