Date: Mon, 11 Nov 2002 17:33:16 +0100 (CET) From: Harti Brandt <brandt@fokus.gmd.de> To: Thomas David Rivers <rivers@dignus.com> Cc: brandt@fokus.gmd.de, <gallatin@cs.duke.edu>, <FreeBSD-current@FreeBSD.ORG> Subject: Re: gcc 3.2.1 optimization bug ? Message-ID: <20021111172959.W32091-100000@beagle.fokus.gmd.de> In-Reply-To: <200211111618.gABGIS155735@lakes.dignus.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 11 Nov 2002, Thomas David Rivers wrote:
TDR>Harti Brandt <brandt@fokus.gmd.de> wrote:
TDR>>
TDR>> It may be possible that 6.5 (7) the last sentence allows you to access your
TDR>> 32-bit or 64-bit value character-wise (although I'm not sure).
TDR>
TDR>The C99 standard does seem to add an "exception" for access via
TDR>character pointers.  The C89 standard did not have that clause.
Yes, thats the 6.5 (7) clause, but I'm not sure, because it does not speak
about pointers. I don't fully understand what they mean :-(
TDR>As far as the union question - the answer is that you cannot
TDR>"read" from a union from a different member than it was "stored"
TDR>to.
TDR>
TDR>For example:
TDR>
TDR>   char ch;
TDR>   union {
TDR>      int x;
TDR>      char c;
TDR>   } my_union;
TDR>
TDR>  my_union.x = 10;
TDR>  ch = my_union.c;
TDR>
TDR>Technically, this is illegal in ANSI C, and not guaranteed to "work".  Although
TDR>it will likely "work" in just about every reasonable environment.
TDR>(For some definition of "work" :-) )
Hmm, I though the following would work:
void
foo(unsigned short *s)
{
	unsigned short temp;
	temp = s[0];
	s[0] = s[1];
	s[1] = temp;
}
main()
{
	int i = 0x12345678;
	foo(&i);
	printf("%08x\n", i);
}
because how would the compiler in main() know, that you do something wrong
in foo(). But... if you compile this with -O5, it does not work! This is
because the compiler inlines foo() into main and the program prints junk like
0x12342804.
harti
-- 
harti brandt, http://www.fokus.gmd.de/research/cc/cats/employees/hartmut.brandt/private
              brandt@fokus.gmd.de, brandt@fokus.fhg.de
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021111172959.W32091-100000>
