Can this type-punned warning be silenced by using a union instead of a cast?
HOSTCC scripts/basic/fixdep
scripts/basic/fixdep.c: In function 'traps':
scripts/basic/fixdep.c:377: warning: dereferencing type-punned pointer
will break strict-aliasing rules
Something like the attached? As far as I can tell the union should take care of the alignment and make the __attribute__ unnecessary, in which case it does not need to be static either. Compiled with gcc 4.4 cross compiler for i386 successfully but not boot tested.
Steve Kenton
--- linux-2.6/scripts/basic/fixdep.c.orig 2008-12-27 20:54:32.234375000 -0600
+++ linux-2.6/scripts/basic/fixdep.c 2008-12-27 21:03:00.140625000 -0600
@@ -372,11 +372,11 @@ void print_deps(void)
void traps(void)
{
- static char test[] __attribute__((aligned(sizeof(int)))) = "CONF";
+ union { int i; char c[4]; } test = { .c = "CONF" };
- if (*(int *)test != INT_CONF) {
+ if (test.i != INT_CONF) {
fprintf(stderr, "fixdep: sizeof(int) != 4 or wrong endianess? %#x\n",
- *(int *)test);
+ test.i);
exit(2);
}
}