https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111742
Bug ID: 111742 Summary: Misaligned generated code with MI using aligned virtual base Product: gcc Version: 13.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: cuzdav at gmail dot com Target Milestone: --- Generated code is misaligned (and crashes in slightly more complex code), in trunk all the way back to gcc 8.1, when built in c++11 or higher, with O3. (Linux, x86) Complete code: ////////////////////////////////////////// struct X { void * a = nullptr; void * b = nullptr; }; struct alignas(16) AlignedData { }; struct A : virtual AlignedData { X xxx; }; struct B : virtual AlignedData {}; struct Test : B, A {}; Test* t = new Test; int main() {} ////////////////////////////////////////// Compiler Explorer demo: https://godbolt.org/z/aodTdaedW Running with UB-san reports this: /app/example.cpp:14:8: runtime error: constructor call on misaligned address 0x00000227f2b8 for type 'struct A', which requires 16 byte alignment 0x00000227f2b8: note: pointer points here 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ /app/example.cpp:8:8: runtime error: member access within misaligned address 0x00000227f2b8 for type 'struct A', which requires 16 byte alignment 0x00000227f2b8: note: pointer points here 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^