https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85205
Bug ID: 85205 Summary: Optimalisation fails when using a union to allocate space on stack Product: gcc Version: 7.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: Mijzelf at gmx dot com Target Milestone: --- The code #include <stdio.h> static int count = 0; struct X{ int length; struct Y { int var1; int var2; } data[ 1 ]; }; int main( int argc, char **argv ) { union { X args; char dummy[ sizeof( X ) + 6 * sizeof( X::Y ) ]; }; printf( "%d sizeof(dummy) = %ld\n", ++count, sizeof(dummy) ); for( int i=0; i<5; i++ ) { printf( "i:%d\n", i ); args.data[ i ].var1 = i; } return 0; } with an optimalisation of at least -O2 (g++ -O2 source.cpp) gives as output: 1 sizeof(dummy) = 60 i:0 i:1 2 sizeof(dummy) = 60 i:0 i:1 <snip> 37405 sizeof(dummy) = 60 i:0 i:1 37406 sizeof(dummy) = 60 i:0 i:1 Segmentation fault (core dumped) If the code is changed so data has 0 elements: struct X{ int length; struct Y { int var1; int var2; } data[ 0 ]; }; the code works as expected 1 sizeof(dummy) = 52 i:0 i:1 i:2 i:3 i:4