[Bug c/17665] wrong code with -O2

jsm at polyomino dot org dot uk gcc-bugzilla@gcc.gnu.org
Sat Sep 25 08:48:00 GMT 2004


------- Additional Comments From jsm at polyomino dot org dot uk  2004-09-25 08:48 -------
Subject: Re:  wrong code with -O2

On Sat, 25 Sep 2004, davids at webmaster dot com wrote:

> I am perfectly willing to entertain the possibility that I am being dense or 
> misguided, but we're talking about 'void *' here. You can't get a 'void *' by 
> taking the address of a 'void' and you can't dereference a 'void *' to get 
> a 'void'. The only use of 'void *' is for type aliasing.

Look at the code quoted.  You are using the same memory to store an object 
of type "void *" and an object of type "char *".  Although those objects 
have the same representation and alignment requirements, this is not 
permitted aliasing (whereas you could, for example, use the same memory to 
store "int" and "unsigned int").

> The documentation for '-fstrict-aliasing' talks about an object of one type 
> being at the same address as an object of another type. But 'void' is not a 
> type of object, so I don't see that I'm violating aliasing rules.

The problematic object types in your code are "void *" and "char *" 
(accessed by dereferencing "void **" and "char **" pointers), not "void" 
and "char".



-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17665



More information about the Gcc-bugs mailing list