On Sun, 2007-10-28 at 18:34 -0700, David Miller wrote: > More importantly, you cannot break things on people out of mere > convenience.
If you want a case of this .. its the ill-considered strict aliasing rules in C. WG14 seems to think C had a strong enough type system to make this rule, but it does not. So gcc provides a switch to turn it off. This is actually a bit annoying, because the granularity is not so sweet: I'd be happy with floating point aliasing to be strict, but not integers and *definitely* not pointers. C is too brain dead for strict aliasing: it could break many memory management codes which, for example, alias memory with pointer to void* for alignment purposes, or intptr_t for bit fiddling. Or code like this which I write: struct X { int x; } x; struct Y { int y[1]; } y; Y *py = (Y*)(void*)&x; X *px = (X*)(void*)&y; [My Felix compiler does this cast systematically and deliberately] -- John Skaller <skaller at users dot sf dot net> Felix, successor to C++: http://felix.sf.net