以下是可重现的示例:
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
这是Clang 6.0附带的Coroutines TS实施中的错误吗?