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