https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70603
Bug ID: 70603 Summary: gcc alignas issue with pointers to template class Product: gcc Version: 4.9.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: mhadji at gmail dot com Target Milestone: --- I am using gcc 4.9.2 and I am trying to properly align statically initialized arrays for use with AVX. Here is the gist of the code that segfaults due to alignment issues: #include <iostream> #include <cstddef> struct B { alignas(32) double x[1] = {0}; }; struct A { A() { b1 = new B(); b2 = new B(); } B* b1; B* b2; }; int main(int argc, char** argv) { A a; int ret = (ptrdiff_t) a.b1->x % 32 + (ptrdiff_t) a.b2->x % 32; std::cout << (ptrdiff_t) a.b1->x % 32 << "," << (ptrdiff_t) a.b2->x % 32 << "\n"; return ret; } On my system array a.b2->x is not aligned on a 32 byte boundary. The size of x does not matter, as long as it is an array (so "double x = 0" works fine). If I make the pointers to B statically allocated members instead, it works properly. If I create local variables *b1 and *b2 inside main, it works properly. If I use dynamically allocated arrays inside class A and posix_malloc, it works properly.