ISO Cの型違いポインタアクセス禁止規則

http://www.atdot.net/~ko1/diary/200711.html#d15

手近に64ビット環境がない&ちゃんと見ていないので外しているかもしれませんが、

http://gcc.gnu.org/bugs.html#nonbugs_c ("Casting does not work as expected when optimization is turned on.")
http://mail-index.netbsd.org/tech-kern/2003/08/11/0001.html

あたりにある"dereferencing type-punned pointer will break strict-aliasing rules"問題だったりしないでしょうか。

ISO C規格の和訳(JIS規格)より引用:

オブジェクトに格納された値に対するアクセスは,次のうちのいずれか一つの型をもつ左辺値によらなければならない(73)。
− オブジェクトの有効型と適合する型
− オブジェクトの有効型と適合する型の修飾版
− オブジェクトの有効型に対応する符号付き型又は符号無し型
− オブジェクトの有効型の修飾版に対応する符号付き型又は符号無し型
− メンバの中に上に列挙した型の一つを含む集成体型又は共用体型(再帰的に包含されている部分集成体又は含まれる共用体のメンバを含む。)
− 文字型

(73) この列挙は,オブジェクトに別名を付けてもよい状況と,付けてはならない状況を規定するためのものである。

要するに「最適化の妨げになるので、互換性のない型のポインタにキャストしてアクセスしたら、どうなっても知らないよ(char *以外)」「それが嫌だったらキャストじゃなくてunionを使ってね」ということみたいです。

そんなことはわかりきっていて、違う話だったらすみません。