This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: Align a POD srtu ct on the stack (ali asing issu e with gcc 4.6+)‏


>
> 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.
>



I also asked this question on SO, there are more details about the issue:
http://stackoverflow.com/questions/14170010/strict-aliasing-and-memory-alignment 		 	   		  

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]