RENESAS TOOL NEWS 2007年02月16日 : 070216/tn3
| M32CシリーズおよびM16Cシリーズ用
Cコンパイラパッケージ
ご使用上のお願い |
M32CシリーズおよびM16Cシリーズ用Cコンパイラパッケージの使用上の注意事項を
連絡します。
1. 該当製品
(1) M32Cシリーズ*1用Cコンパイラパッケージ (M3T-NC308WA)
V.1.00 Release 1 ~ V.5.40 Release 00
(2) M16Cシリーズ*2用Cコンパイラパッケージ (M3T-NC30WA)
V.1.00 Release 1 ~ V.5.40 Release 00A
*1. M32C/80, M16C/80, およびM16C/70シリーズの総称です。
*2. M16C/60, /30, /20, /10, /TinyおよびR8C/Tinyシリーズの総称です。
2. 内容
定数のみの演算を行うと誤ったコードを生成する場合があります。
3. 発生条件
以下の条件をすべて満たす場合に発生します。
(1) 定数のみを用いた演算をしている。
(2) (1)項の演算途中で演算結果がsinged intまたはsigned short型で
表現できる範囲を超えている。
ただし、上記の条件を満たしても、以下の製品を使用し、定数式が関数の
実引数である場合は該当しません。
・ M32Cシリーズ用Cコンパイラパッケージ V.5.40 Release 00
・ M16Cシリーズ用Cコンパイラパッケージ V.5.40 Release 00および
Release 00A
発生例
-------------------------------------------------------------
int data;
int func()
{
if( data < 500*300/200) /* 発生条件(1)および(2) */
return 1;
sub(500*300/200);
}
-------------------------------------------------------------
発生条件(2)においてsigned intまたはsigned short型の範囲を超えた場合、
本来はオーバーフローした結果を捨ててsigned intまたはsigned short型と
して計算を行うのが正しい処理ですが、該当製品ではオーバーフローした
場合も値を保持して計算します。
上記の例では、0x5Eとの比較が正しいですが、該当製品では、0x2EEと
比較します。
4. 恒久対策
M32Cシリーズ用Cコンパイラパッケージ V.5.41 Release 00以降、および
M16Cシリーズ用Cコンパイラパッケージ V.5.42 Release 00以降では
発生しませんので、これらのバージョンを使用ください。