Hi, please help me understand these strict-aliasing warnings: $ cat test.c /* 1*/ extern void allocate(int size, void** p); /* 2*/ /* 3*/ typedef struct X { /* 4*/ char A; /* 5*/ } X; /* 6*/ /* 7*/ X* test1(void) /* 8*/ { /* 9*/ X *x; /*10*/ allocate((int)sizeof(X), (void**)&x); /* current code */ /*11*/ allocate((int)sizeof(X), &x); /* as older gcc warned here already */ /*12*/ return x; /*13*/ } /*14*/ /*15*/ X* test2(void) /*16*/ { /*17*/ union { /*18*/ X *x; /*19*/ void* v; /*20*/ } u; /*21*/ allocate((int)sizeof(X), &u.v); /*22*/ allocate((int)sizeof(X), (void**)&u); /*23*/ return u.x; /*24*/ } $ gcc -Wall -O2 -c test.c -Wstrict-aliasing=2 test.c: In function 'test1': test.c:10: warning: dereferencing type-punned pointer will break strict-aliasing rules test.c:11: warning: passing argument 2 of 'allocate' from incompatible pointer type test.c: In function 'test2': test.c:22: warning: dereferencing type-punned pointer might break strict-aliasing rules Strange is that line 10 "will", but line 22 "might" break strict-aliasing rules. Do I really need the union here like in test2() and line 21 ? Or is there another "correct" way to get rid of warning in line 10 ? Thanks! /haubi/ -- 17.-19. Oktober 2007 Salomon Automation am 24. Deutschen Logistik-Kongress der BVL, Berlin; Stand W/09 14. November 2007 Salomon Automation an der LogIT Retail im Leopoldsmuseum in Wien Salomon Automation GmbH - Friesachstrasse 15 - A-8114 Friesach bei Graz Sitz der Gesellschaft: Friesach bei Graz UID-NR:ATU28654300 - Firmenbuchnummer: 49324 K Firmenbuchgericht: Landesgericht für Zivilrechtssachen Graz