[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Forward: Re: optimization/7427: gcc-3.1.1 -O2 problem for checksum calculation (powerpc)



>> C aliasing rules say that variables with two different types do
>> not belong to the same alias set (except for char* and void*).

> 最近の C はよくわからない…。

Andrew Pinski の指摘を読んでから調べて気づいたんですが、これは
どうも、C9X の話じゃなくて、いわゆる ANSI-C の時代から、こうだった
みたいです。

JIS X3010-1993 (ISO/IEC 9899:1990) より、

	6.3 式
	    :
	  [中略]
	    :
	オブジェクトに格納された値にアクセスする方法は, 次のうち
	いずれか一つの型をもつ左辺値によるものだけでなければならない (*36)。
	- オブジェクトの宣言された型
	- オブジェクトの宣言された型の修飾版
	- オブジェクトの宣言された型と対応する符合付き整数型または
	  符合なし整数型
	- (再帰的に包含されている部分集成体または共用体のメンバを含めて)
	  メンバの中にこれらの型の一つを含む集成体又は共用体型
	- 文字型

	(*36) この一覧表は、オブジェクトに別名をつけてもよい状況と, 
	  付けてはならない状況を規定するためのものである。

ここで言う「修飾版」というのは、const/volatile 修飾子をつけた型のこと
を指します。また、集成体型というのは、配列型と構造体型の総称です。

うーん、そうだったのか、勉強になるなあ。
文字型アクセスだけは、特別扱いしているところが、中途半端というか、
C らしいというか...
--
soda