RENESAS TOOL NEWS 2008年06月16日 : 080616/tn1
| M16Cファミリ用Cコンパイラパッケージ ご使用上のお願い
--forまたはwhile文でvolatile修飾した変数を 使用する際の注意事項 |
M16Cファミリ用Cコンパイラパッケージの使用上の注意事項を連絡します。
- forまたはwhile文でvolatile修飾した変数を使用する際の注意事項
1. 該当製品
(1) R32C/100シリーズ用Cコンパイラパッケージ V.1.01 Release 00
(2) M32Cシリーズ*1用Cコンパイラパッケージ(M3T-NC308WA)
V.1.00 Release 1 ~ V.5.41 Release 01
(3) M16Cシリーズ*2用Cコンパイラパッケージ(M3T-NC30WA)
V.1.00 Release 1 ~ V.5.44 Release 00
*1 M32C/80、M16C/80、およびM16C/70シリーズの総称です。
*2 M16C/60、/30、/20、/10、/Tiny、およびR8C/Tinyシリーズの総称です。
2. 内容
forまたはwhile文の初回ループのみ条件判断を省略できる場合で、条件式中で
比較直前に定数を代入した変数と比較したとき、変数にvolatileをつけても
最適化が行われ条件判断を省略してしまう場合があります。
2.1 発生条件
以下の条件をすべて満たす場合に発生します。
(1) 最適化オプション -O[3-5]、-OR、または -OSのいずれかを使用している。
(2) 最適化オプション -Ono_break_source_debug(-ONBSD)を使用していない。
(3) forまたはwhileで構成された、入口で条件判断するループが存在する。
(4) ループの条件式の変数がvolatile修飾されている。
(5) ループの条件式で、変数の値と定数を比較している。
(6) ループの条件式で定数と比較する変数に、比較の直前で定数を代入して
いる。
2.2 発生例
------------------------------------------------------------------------
extern int x;
void func(void)
{
volatile int i;
for(i = 0; i < 10; ++i){
++x;
}
}
------------------------------------------------------------------------
3. 回避策
以下のいずれかにより、回避してください。
(1) 条件式で、変数の値と定数の比較ではなく変数と変数の値を比較する。
(2) 最適化オプション -Ono_break_source_debug(-ONBSD)を使用する。
4. 恒久対策
次バージョンで修正する予定です。