https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69250
Bug ID: 69250 Summary: __attribute__ ((aligned(32))) not honored in classes Product: gcc Version: 5.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: tkoenig at gcc dot gnu.org Target Milestone: --- 32-byte alignment (useful for avx) breaks when used in classes. This is for 5.3 on x86_64-unknown-cygwin. Test case: #include <iostream> #define ALIGN __attribute__ ((aligned(32))) class Foo { public: int a; double x[24] ALIGN; int b; } ALIGN; int main() { for (int i=0; i<5; i++) { Foo *p; double *a; p = new Foo; a = new double; unsigned long pv; pv = (unsigned long) p->x; if (pv % 32 != 0) std::cout << "pv = " << pv << " is not divisble by 32" << " remainder is " << pv%32 << "\n"; else std::cout << "pv = " << pv << " is divisble by 32\n"; } } Output: pv = 25769945392 is not divisble by 32 remainder is 16 pv = 25770175232 is divisble by 32 pv = 25770175536 is not divisble by 32 remainder is 16 pv = 25770175840 is divisble by 32 pv = 25770176144 is not divisble by 32 remainder is 16 This is closely related to PR 65122, but IMHO not exactly a dup.