------- Comment #5 from ibolton at gcc dot gnu dot org  2010-09-08 10:02 -------
Confirmed on latest 4.4, 4.5 and 4.6 (trunk).

Related GCC documentation on alignment of structure fields is here:

In the short-term, one workaround is to write the code as follows:

#include <stdio.h>

struct Foo
    char c[sizeof(int)];
} __attribute__((aligned(4)));

char junk;
Foo f;

int main()
    int *i = reinterpret_cast<int *>(&f);
    *i = 0x44434241;
    printf("%c %c %c %c", f.c[0], f.c[1], f.c[2], f.c[3]);

By aligning the structure Foo to 4 bytes, you can successfully cast a Foo* to
an int* and then initialise all four chars in one go.  (Without the type
attribute for the struct Foo, you still get the warning.)  My example prints "A
B C D".

FYI: I have tracked down the alleged offending code mentioned in an earlier
comment to build_c_cast() in c-typeck.c.


ibolton at gcc dot gnu dot org changed:

           What    |Removed                     |Added
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
      Known to fail|                            |4.4.5 4.5.2 4.6.0
   Last reconfirmed|0000-00-00 00:00:00         |2010-09-08 10:02:04
               date|                            |


Reply via email to