Ethereal-dev: [Ethereal-dev] A gcc 3.3 warning I don't understand
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Joerg Mayer <jmayer@xxxxxxxxx>
Date: Mon, 15 Sep 2003 00:10:25 +0200
Hello List,
when I compile Ethereal with gcc 3.3.1, I get the following warnings:
plugins.c:232: warning: dereferencing type-punned pointer will break strict-aliasing rules
plugins.c:247: warning: dereferencing type-punned pointer will break strict-aliasing rules
plugins.c:252: warning: dereferencing type-punned pointer will break strict-aliasing rules
packet-tlv.c:2725: warning: dereferencing type-punned pointer will break strict-aliasing rules
packet-gryphon.c:809: warning: dereferencing type-punned pointer will break strict-aliasing rules
packet-gryphon.c:809: warning: dereferencing type-punned pointer will break strict-aliasing rules
packet-gryphon.c:809: warning: dereferencing type-punned pointer will break strict-aliasing rules
packet-gryphon.c:809: warning: dereferencing type-punned pointer will break strict-aliasing rules
packet-gryphon.c:809: warning: dereferencing type-punned pointer will break strict-aliasing rules
packet-bssgp.c:736: warning: dereferencing type-punned pointer will break strict-aliasing rules
packet-dns.c:1380: warning: type-punning to incomplete type might break strict-aliasing rules
packet-dns.c:1390: warning: type-punning to incomplete type might break strict-aliasing rules
packet-dns.c:1399: warning: type-punning to incomplete type might break strict-aliasing rules
packet-m2pa.c:430: warning: dereferencing type-punned pointer will break strict-aliasing rules
packet-m3ua.c:1750: warning: dereferencing type-punned pointer will break strict-aliasing rules
packet-mtp3.c:494: warning: dereferencing type-punned pointer will break strict-aliasing rules
packet-tzsp.c:395: warning: dereferencing type-punned pointer will break strict-aliasing rules
packet-tzsp.c:398: warning: dereferencing type-punned pointer will break strict-aliasing rules
packet-tzsp.c:401: warning: dereferencing type-punned pointer will break strict-aliasing rules
I don't understand what it it talking about: I have read the manpage (excerpt included below) but
still haven't really understood what type-punned means, nor what strict-aliasing (or aliasing at
all) means.
Can someone who knows C please explain these terms to a hobby programmer like me?
Thanks
Jörg
PS: I have made the two examples given in the manpage compile, but I don't get a warning in the
"bad" example
PPS: And here's the manpage from gcc-3.3.1
-----------------snip-----------------------------------------
-fstrict-aliasing
Allows the compiler to assume the strictest aliasing rules applicable to the language
being compiled. For C (and C++), this activates optimizations based on the type of
expressions. In particular, an object of one type is assumed never to reside at the
same address as an object of a different type, unless the types are almost the same.
For example, an "unsigned int" can alias an "int", but not a "void*" or a "double". A
character type may alias any other type.
Pay special attention to code like this:
union a_union {
int i;
double d;
};
int f() {
a_union t;
t.d = 3.0;
return t.i;
}
The practice of reading from a different union member than the one most recently writ
ten to (called ``type-punning'') is common. Even with -fstrict-aliasing, type-punning
is allowed, provided the memory is accessed through the union type. So, the code
above will work as expected. However, this code might not:
int f() {
a_union t;
int* ip;
t.d = 3.0;
ip = &t.i;
return *ip;
}
Every language that wishes to perform language-specific alias analysis should define a
function that computes, given an "tree" node, an alias set for the node. Nodes in
different alias sets are not allowed to alias. For an example, see the C front-end
function "c_get_alias_set".
Enabled at levels -O2, -O3, -Os.
------------snap----------------------------------------------
--
Joerg Mayer <jmayer@xxxxxxxxx>
We are stuck with technology when what we really want is just stuff that
works. Some say that should read Microsoft instead of technology.
- Follow-Ups:
- Re: [Ethereal-dev] A gcc 3.3 warning I don't understand
- From: Guy Harris
- Re: [Ethereal-dev] A gcc 3.3 warning I don't understand
- Prev by Date: Re: [Ethereal-dev] "Problems" with current PER dissection
- Next by Date: Re: [Ethereal-dev] A gcc 3.3 warning I don't understand
- Previous by thread: Re: [Ethereal-dev] "Problems" with current PER dissection
- Next by thread: Re: [Ethereal-dev] A gcc 3.3 warning I don't understand
- Index(es):