Warning

Martin Guy martinwguy@yahoo.it
Tue May 13 13:27:00 GMT 2008


On 5/12/08, Andrew Haley <aph@redhat.com> wrote:
> JJ wrote:
>  > Ex2:   char_array audience;
>  >        thing_array var_list;
>  >        var_list = (thing_array&)audience;
>  >
>  > - From google'ing I found the work-a-round for Ex1 to remove the above
>  > warning,

> Removing the warning won't solve your problem: it's a real bug and
>  may well cause your program to crash or worse.

Indeed. On many architectures, different-sized data objects need to be
aligned differently in memory, on pain of bus errors or garbled data.

If for some reason it *must* access data objects out of a char array,
a conservative assumption is that basic data types must be aligned to
a multiple of their size.

For example, a char array that will be accessed through (uint32_t *) pointers:

uint8_t srtp_ciphertext[38] __attribute__((aligned(32))) = {
     0x80, 0x0f, 0x12, 0x34, 0xde, 0xca, 0xfb, 0xad,
     0xca, 0xfe, 0xba, 0xbe, 0x4e, 0x55, 0xdc, 0x4c,
     0xe7, 0x99, 0x78, 0xd8, 0x8c, 0xa4, 0xd2, 0x15,
...

but yes, a better fix would be for the code not to do this sort of thing at all.

    M



More information about the Gcc-help mailing list