https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67911
Bug ID: 67911 Summary: new expression fails to align overaligned types Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: msebor at gcc dot gnu.org Target Milestone: --- C++ leaves it implementation-defined whether the new expression supports overaligned types. The test case below shows that GCC's new accepts overligned types without a diagnostic but doesn't align them correctly. GCC should either issue a diagnostic when a new expression is invoked with a type whose alignment it cannot satisfy or it should satisfy it. The implementation choice should also be documented in the manual. $ cat a.cpp && /g++ -Wall -Wextra -O2 a.cpp && ./a.out extern "C" int printf (const char*, ...); struct __attribute__ ((aligned (32))) X { char a [32]; }; int main () { X *p = new X (); if (reinterpret_cast<unsigned long>(p) & (alignof (X) - 1)) printf ("%p not %lu-byte aligned\n", p, alignof (X)); } 0x1c81010 not 32-byte aligned