Question: How can I allocate random amount of stack space (using char arrays or alloca, and then align pointer to that stack space and reinterpret this chunk of memory as some structure that has some well defined layout that guarantees alignment of certain variables as long as the structure itself is aligned properly? How can I do so with 4.6+ GCC with full optimizations enabled with strict aliasing enabled (e.g. without passing -fno-strict-aliasing).
Pseudo code: struct my_array { char data[6666]; }; void * buffer = alloca(sizeof(my_array) + 32); void * buffer32 = (((uintptr_t)buffer) + 31) & (~31); assert( ((uintptr_t)buffer) % 32 == 0); my_array * data = (my_array*)buffer32; .... now use my_array, data->data is 32-byte aligned I have a huge function that allocates multiple aligned arrays on the stack using this approach and now it doesn't produce correct results with GCC 4.6+ (on arm, I didn't test it on x86). I've spent 2 days trying to fix the issue, perhaps gcc mailing list is a good place to ask for appropriate workaround? I want to ensure that the function produces correct result even with strict-aliasing enabled. Thanks.