[Bug c++/70603] New: gcc alignas issue with pointers to template class
mhadji at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Apr 8 18:47:00 GMT 2016
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.
More information about the Gcc-bugs
mailing list