This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

ignore that strict-aliasing warning ?


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]