RENESAS TOOL NEWS 2004年8月6日
SHC/C++コンパイラパッケージ V.8.00
使用上のご注意
|
SHC/C++コンパイラVer.8には以下の不具合があります。
ご使用の際にはご注意頂きますようお願い申し上げます。
なお、本不具合の修正版をWEB上より配布しております。
修正版へのリビジョンアップを行って頂きますようお願い申し上げます。
- 該当製品(パッケージバージョン)
SHC/C++コンパイラパッケージ:
R0C40700XSW08R (8.00 Release01、8.00 Release02)
R0C40700XSS08R (8.00 Release01)
R0C40700XSH08R (8.00 Release01)
P0700CAS8-MWR (8.0.00、8.0.01)
P0700CAS8-SLR (8.0.00、8.0.01)
P0700CAS8-H7R (8.0.00、8.0.01)
- 不具合内容
ループ変数の置換不正 (SHC-0003):
ループに型の異なるループ変数が存在する場合に、不正にループ変数が共通化される場合があります。
- 2.1 発生条件
- 以下のすべての条件を満たした場合に発生することがあります。
| (1) | optimize=1を指定している。 |
| (2) | ループが存在する。 |
| (3) | (2)のループ内に、signed int型もしくはsigned long型のループ変数と、unsigned int型もしくはunsigned long型のループ変数が存在する。 |
| (4) | (3)のループ変数の初期値が共に定数である。 |
| (5) | (3)のループ変数の更新値が同じである。 |
- 2.2 発生例
extern void g();
void func(unsigned int x) {
unsigned long i=3;
signed long k=3;
while (i<x) {
if (k<-3) { /* 不正にkをiに置換 */
break;
}
g();
--i;
--k;
}
}
- 回避策
以下のいずれかの方法で回避することができます。
| (1) | optimize=0を指定する。 |
| (2) | 発生条件(3)のループ変数のいずれかをvolatile宣言する。 |
| (3) | 発生条件(3)のループ変数のいずれかをchar/unsigned char/short/unsigned shortのいずれかの型に変更する。 |
| (4) | 発生条件(3)のループ変数を同じ型にする。 |
- 恒久対策
SHC V.8.00 Release03にて修正を行っております。
以下の方法により、V.8最新版へのリビジョンアップを行ってください。
[Windows版をお持ちのお客様]
こちらよりアップデートプログラムをダウンロードしてください。
適当なフォルダへ保存後、実行してください。
[UNIX版をお持ちのお客様]
リビジョンアップ依頼を販売元まで御連絡ください。