RENESAS TOOL NEWS 2006年08月01日 : 060801/tn3
M16Cファミリ用Cコンパイラパッケージ
ご使用上のお願い
--if文を2つ連続して記述する場合の注意事項-- |
M16Cファミリ用Cコンパイラパッケージ(M3T-NC308WAおよびM3T-NC30WA)の使用上の注意事項を連絡します。
- 該当製品
M32C/90, M32C/80, M16C/80, および M16C/70シリーズ用
Cコンパイラパッケージ(M3T-NC308WA)
V.5.00 Release 1 ~ V.5.20 Release 02
M16C/60, M16C/30, M16C/20, M16C/10, M16C/Tiny, および R8C/Tiny用
Cコンパイラパッケージ(M3T-NC30WA)
V.5.00 Release 1 ~ V.5.30 Release 02
- 内容
if文を連続して記述すると、条件分岐のコードが出力されない場合があります。
- 発生条件
以下の条件をすべて満たす場合に発生します。
| (1) |
|
連続する2つのif文がある。 |
| (2) |
|
(1)のif文のうち、先のif文の実行式が無い。 |
| (3) |
|
(1)の2つのif文の制御式で同じ変数を比較している。 |
| (4) |
|
(3)の変数は、同一の変数、または、同一の定数値と比較している。 |
| (5) |
|
(3)の比較で使用している演算子はいずれも == または、== および != である。
もしくは、比較演算子を省略している場合である。 |
| (6) |
|
最適化オプション -O3, -O4, -O5, -OR, -OS, -OR_MAX(-ORM), および-OS_MAX(-OSM) のいずれかを使用している。 |
発生例:
---------------------------------------------------------------------
long a;
long b;
void func(void)
{
signed char data = 0;
long l;
if(b >=0)
l = b;
else
data = 1;
if(data){
}
if(data)
b = l;
}
---------------------------------------------------------------------
- 回避策
実行式のないif文に実行式としてダミーのasm関数を挿入してください。
- 恒久対策
本問題は以下の最新バージョンでは発生しません。最新バージョンへアップデートしてください。
- M32C/90, M32C/80, M16C/80, および M16C/70シリーズ用
Cコンパイラパッケージ V.5.40 Release 00
- M16C/60, M16C/30, M16C/20, M16C/10, M16C/Tiny, および R8C/Tiny用
Cコンパイラパッケージ V.5.40 Release 00A