https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118399

            Bug ID: 118399
           Summary: [coroutine] Stack misaligned
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: newsigma at 163 dot com
  Target Milestone: ---

Compiler explorer: https://godbolt.org/z/7d3aPnvrM
GCC version: 10 ~ trunk
Build option: -mavx -std=c++20

```
#include <immintrin.h>
#include <coroutine>

struct coro {
    using promise_type = coro;

    coro get_return_object() noexcept { return {}; }
    std::suspend_never initial_suspend() noexcept { return {}; }
    std::suspend_always final_suspend() noexcept { return {}; }
    void return_void() noexcept {}
    void unhandled_exception() {}
};

coro f() {
    __m256d ymm{};
    co_return;
}

int main() {
    f();
    return 0;
}
```

At line 4012c9:
```

```
    vmovapd %ymm0,0x40(%rax)
```

0x40(%avx) is not properly aligned as 32.

LLVM has a similar issue that read from a misaligned position, while gcc try to
write to a misaligned position.

FYI: https://github.com/llvm/llvm-project/issues/122283

Reply via email to