From: Michael Haubenwallner <michael.haubenwallner@salomon.at>
To: gcc-help@gcc.gnu.org
Subject: ignore that strict-aliasing warning ?
Date: Thu, 18 Oct 2007 10:22:00 -0000 [thread overview]
Message-ID: <1192695762.13354.50.camel@sapc154> (raw)
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
next reply other threads:[~2007-10-18 8:23 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-18 10:22 Michael Haubenwallner [this message]
2007-10-19 2:54 ` Andrew Haley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1192695762.13354.50.camel@sapc154 \
--to=michael.haubenwallner@salomon.at \
--cc=gcc-help@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).