RENESAS TOOL NEWS 2004年12月16日 : RSO-M3T-NC308WA_2-041216D
M3T-NC308WA および M3T-NC30WA
ご使用上のお願い
--if文の制御式中にある構造体のメンバの評価結果について--
|
Cコンパイラパッケージ M3T-NC308WAおよびM3T-NC30WA の使用上の注意事項を連絡します。
- if文の制御式中にある構造体のメンバの評価結果に関する注意事項
- 該当製品
M32C/90, M32C/80シリーズ, M16C/80 およびM16C/70シリーズ用:
M3T-NC308WA V.3.10 Release 1 ~ V.5.10 Release 1
M16C/60, M16C/30, M16C/Tiny, M16C/20, M16C/10, およびR8C/Tinyシリーズ用:
M3T-NC30WA V.5.00 Release 1 および V.5.10 Release 1
- 内容
構造体型メンバと定数を比較する条件式が複数ある場合、不正なコードを生成します。
- 発生条件
以下の条件をすべて満たす場合に発生します。
| (1) | if文の制御式中に構造体型メンバと定数を比較する条件式が複数ある。 |
| (2) | (1)の条件式は "==" または "!=" で比較している。 |
| (3) | (1)のメンバは配列型を除くunsigned char型、またはsigned char型である。 |
| (4) | (1)のメンバは連続した領域に配置されている。 |
| (5) | (1)の条件式はすべてOR演算子で結合されている。 |
| (6) | コンパイルオプション-O4または-O5を指定している。
または-O1、-O2、-O3、-OR、および-OSのいずれかひとつ以上の指定に加えて
-Ocompare_byte_to_word(-OCBTW)を指定している。 |
発生例
-------------------------------------------------------------------------
struct S
{
char a; /* 発生条件(3)および(4) */
char b; /* 発生条件(3)および(4) */
char c;
} s;
int i;
void func(void)
{
if(( s.a == 0x01 ) || (s.b == 0x01)) /* 発生条件(1),(2)および(5) */
i = 10;
else
i = 20;
}
-------------------------------------------------------------------------
- 回避策
コンパイルオプション-Ono_logical_or_combine(-ONLOC)を追加してください。
- 恒久対策
M3T-NC308WA V.5.20 Release 1およびM3T-NC30WA V.5.20 Release 1以降では発生しません。
M3T-NC308WAおよびM3T-NC30WAはこちらからオンラインバージョンアップできます。