Can this type-punned warning be silenced by using a union instead of a cast?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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);
 	}
 }

[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux