strict aliasing: how to swap pointers

Evan Jones evanj@MIT.EDU
Wed Apr 30 15:15:00 GMT 2008

John Love-Jensen wrote:
> void** is not void*.

Ah, of course. So with strict aliasing, GCC assumes that a void** 
pointer only points to variables of exactly type void*? This would 
explain my confusion. I was assuming that since T* is convertible to 
void*, void** can point to any T*. It makes sense that this is not true.

I wish I could get GCC to generate a "surprising" optimization for a 
void**/T** type pun, but I have been unable to do so. This, of course, 
doesn't mean that ignoring the warning is safe.

It seems to me that the lesson for me is that when doing low-level 
type-unsafe manipulation, void* pointers should be used. Since GCC must 
assume that void* pointers can point anywhere, it will not be able to 
optimize away the accesses to them, which is what I want in this case. 
Please correct me if I am wrong about this.



Evan Jones

More information about the Gcc-help mailing list